是否有一个简单的代码在Kotlin中玩addDetail?
下面的代码可以很好地工作,但fun addDetail(...)
的代码太复杂了,有没有一种简单的方法来做到这一点? 谢谢!
BTW, fun addDetail(...)
, aMListDetail
可能为null,而aMListDetail?.innerListDetail
可能为null。
data class MDetail ( val _id: Long ) class DetailsHandler(mContext: Context = UIApp.instance) { data class MListDetail(val innerListDetail: MutableList) private var aMListDetail: MListDetail? var mJson: String by PreferenceTool(mContext,"mySavedJson", "") init { aMListDetail= Gson().fromJson(mJson,MListDetail::class.java) } fun addDetail(aMDetail:MDetail){ if (aMListDetail==null){ aMListDetail=MListDetail(mutableListOf(aMDetail)) }else{ if (aMListDetail?.innerListDetail==null){ aMListDetail=MListDetail(mutableListOf(aMDetail)) }else { aMListDetail?.innerListDetail?.add(aMDetail) } } mJson = Gson().toJson(aMListDetail) } }
fun addDetail(aMDetail: MDetail) { if (aMListDetail?.innerListDetail == null) { aMListDetail = MListDetail(mutableListOf(aMDetail)) } else { aMListDetail.innerListDetail.add(aMDetail) } mJson = Gson().toJson(aMListDetail) }
替代方案:
fun addDetail(aMDetail: MDetail) { if (aMListDetail?.innerListDetail == null) { aMListDetail = MListDetail(mutableListOf()) } aMListDetail.innerListDetail.add(aMDetail) mJson = Gson().toJson(aMListDetail) }
你不需要无效的?.
运算符在你的add()
调用中,因为那时你已经检查过aMListDetail != null
和innerListDetail != null
。
顺便说一句,在有趣的addDetail(…),aMListDetail可能为null,
为什么不从源头解决问题? 你在构造函数中初始化它,然后告诉Kotlin它可以被设置为null,但实际上你永远不会这样做!
如果删除未使用的可空性,代码将简化为:
class DetailsHandler(mContext: Context = UIApp.instance) { data class MListDetail(val innerListDetail: MutableList) var mJson: String by PreferenceTool(mContext,"mySavedJson", "") // can even be val private var aMListDetail: MListDetail init { aMListDetail= Gson().fromJson(mJson,MListDetail::class.java) } fun addDetail(aMDetail:MDetail){ aMListDetail.innerListDetail.add(aMDetail) mJson = Gson().toJson(aMListDetail) } }
如果你的真实代码在开始时没有初始化,可以考虑by lazy
或者by notNull
。
和aMListDetail?.innerListDetail可能为空。
只有aMListDetail
为null,你应该避免如上所述。
最后,如果你真的需要一个aMListDetail
为null
,你可以写
aMListDetail?.let { it.innerListDetail.add(aMDetail) }
(如果一个aMListDetail
为null
,它什么也不aMListDetail
)
fun addDetail(aMDetail:MDetail){ if (aMListDetail?.innerListDetail==null){ aMListDetail=MListDetail(mutableListOf(aMDetail)) }else { aMListDetail?.innerListDetail?.add(aMDetail) } mJson = Gson().toJson(aMListDetail) }
8-)