是否有一个简单的代码在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 != nullinnerListDetail != 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,你应该避免如上所述。

最后,如果你真的需要一个aMListDetailnull ,你可以写

 aMListDetail?.let { it.innerListDetail.add(aMDetail) } 

(如果一个aMListDetailnull ,它什么也不aMListDetail

 fun addDetail(aMDetail:MDetail){ if (aMListDetail?.innerListDetail==null){ aMListDetail=MListDetail(mutableListOf(aMDetail)) }else { aMListDetail?.innerListDetail?.add(aMDetail) } mJson = Gson().toJson(aMListDetail) } 

8-)