我有我的可分类的文章:
class Article : Parcelable {
var image: Long? = null
var category: String? = null
var videos: String? = null
constructor(data: JSONObject) {
if (condition) image = 50000L
category = data.getString("category")
videos = data.getString("videos")
}
private constructor(parcel: Parcel) {
image = parcel.readLong()
category = parcel.readString()
videos = parcel.readString()
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeLong(image) // error here
dest.writeString(category)
dest.writeString(videos)
}
override fun describeContents(): Int = 0
companion object {
@JvmField val CREATOR: Parcelable.Creator<Article> = object : Parcelable.Creator<Article> {
override fun createFromParcel(parcel: Parcel): Article = Article(parcel)
override fun newArray(size: Int): Array<Article?> = arrayOfNulls(size)
}
}
}
但我的 class 在编写图像var时遇到类型不匹配 . 它期待长而不长?我明白,如果我做这样的事情,这可以解决:
dest.writeLong(image!!)
但问题是这个var在我的上下文中可能真的是空的 . 我不希望将我的图像var定义为默认值,如0.我真的希望var保持可为空 .
有没有办法写一个可空的var?
3 回答
在Kotlin中,你必须处理原始类型的Kotlin的空案例,它们是Java中的对象(
Long
而不是long
) . 您可以将以下逻辑应用于任何此类型 .对于
Boolean
,您可以执行以下操作:将这些添加到
Parcelable
数据类并在writeToParcel
中使用它们在Java中,我处理
Long
(而不是long
)的方式在用于编写其他"nullable"类型的Android源代码之后被模式化:您首先编写某种标记值以指示null与非null,然后您有条件地写入真实值 .希望你能适应kotlin .
如果您的图像变量应该可以为空
parcel.readValue(Long::class.java.classLoader) as? Long
parcel.writeValue(image)