是否有一个简单的代码在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) } } 

3 Solutions collect form web for “是否有一个简单的代码在Kotlin中玩addDetail?”

 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-)

  • java.lang.NoClassDefFoundError:kotlin / jvm / internal / Intrinsics
  • 预期types不接受Java中的空值,但Kotlin中的值可能为空
  • 如何在eclipse maven web项目中编译kotlin
  • Kotlin JS JSON反序列化
  • 在Kotlin中为variables使用“m”前缀
  • 我们如何在不使用第三方库的情况下在kotlin中定义id?
  • Kotlin - IntelliJ项目设置
  • 如何显式调用一个对象的init块?
  • 在Kotlin 1.1.0编译中无法解析符号@ReadOnly和@Mutable
  • 在Kotlin for Android中触发一个接口
  • Retrofit2 + Kotlin中的SimpleXML:MethodException:注释必须标记一个set或get方法
  • Kotlin language will be the best programming language for Android.