#kotlin #nullable #parcelable
#kotlin #обнуляемое #разделяемое
Вопрос:
Наличие разделяемого класса с обнуляемым логическим элементом memembr по умолчанию равно null
можно было бы сделать это следующим образом
parcel.writeByte(if (isAllowed==null) -1 else (if (isAllowed) 1 else 0))
но как получить его обратно и передать в конструкторе?
Есть ли лучший способ сериализовать / десериализовать обнуляемое логическое значение?
class Config(val isAllowed: Boolean?=null, val startPos: Int=-1 ) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readByte() != 0.toByte(),
parcel.readInt()
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeByte(if (isAllowed) 1 else 0)
parcel.writeInt(startPos)
}
......
Ответ №1:
Вы можете использовать .let{}
для возврата вычисленного значения.
constructor(parcel: Parcel) : this(parcel.readByte().let { if(it < 0) null else (it > 0) },parcel.readInt())
Ответ №2:
Вам нужен способ создать a Config
из a Parcel
, но это не обязательно должен быть конструктор, даже если большинство примеров делают это. В вашем CREATOR
:
fun createFromParcel(parcel: Parcel): Config {
val parcelByte = parcel.readByte()
val isAllowed = if (parcelByte < 0) null else parcelByte > 0
val startPos = parcel.readInt()
return Config(isAllowed, startPos)
}
Очевидно, что это может быть извлечено в fun Parcel.read(write)NullableBoolean()
, если вам это понадобится более одного раза.
Или просто используйте @Parcelize
🙂