¿Cómo establecer una preference de valor en Kotlin?

El siguiente código es de un proyecto de muestra sobre Kotlin, puedo usar el Código 1 para get un valor de preferences compartidas, pero ¿puedo establecer el valor de las preferences compartidas?

No puedo encontrar esos códigos en el proyecto de muestra, ¿podría decirme cómo puedo hacerlo? ¡Gracias!

Código 1

class SettingsActivity : AppCompatActivity() { companion object { val ZIP_CODE = "zipCode" val DEFAULT_ZIP = 94043L } var zipCode: Long by DelegatesExt.preference(this, ZIP_CODE, DEFAULT_ZIP) } 

Código 2

 object DelegatesExt { fun <T> notNullSingleValue() = NotNullSingleValueVar<T>() fun <T> preference(context: Context, name: String, default: T) = Preference(context, name, default) } class NotNullSingleValueVar<T> { private var value: T? = null operator fun getValue(thisRef: Any?, property: KProperty<*>): T { return value ?: throw IllegalStateException("${property.name} not initialized") } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { this.value = if (this.value == null) value else throw IllegalStateException("${property.name} already initialized") } } class Preference<T>(val context: Context, val name: String, val default: T) { val prefs: ShanetworkingPreferences by lazy { context.getShanetworkingPreferences("default", Context.MODE_PRIVATE) } operator fun getValue(thisRef: Any?, property: KProperty<*>): T { return findPreference(name, default) } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { putPreference(name, value) } @Suppress("UNCHECKED_CAST") private fun findPreference(name: String, default: T): T = with(prefs) { val res: Any = when (default) { is Long -> getLong(name, default) is String -> getString(name, default) is Int -> getInt(name, default) is Boolean -> getBoolean(name, default) is Float -> getFloat(name, default) else -> throw IllegalArgumentException("This type can be saved into Preferences") } res as T } private fun putPreference(name: String, value: T) = with(prefs.edit()) { when (value) { is Long -> putLong(name, value) is String -> putString(name, value) is Int -> putInt(name, value) is Boolean -> putBoolean(name, value) is Float -> putFloat(name, value) else -> throw IllegalArgumentException("This type can't be saved into Preferences") }.apply() } } 

Y más

Si la function putPreference es pública, puedo establecer el valor de las preferences compartidas usando el siguiente código, pero es feo

 class SettingsActivity : AppCompatActivity() { companion object { val ZIP_CODE = "zipCode" val DEFAULT_ZIP = 94043L } DelegatesExt.Preference(this, ZIP_CODE, DEFAULT_ZIP).putPreference( ZIP_CODE,"99999L"); }