在Kotlin中有一个简单的有趣的addDetail代码吗?

时间:2017-11-21 06:58:41

标签: kotlin

以下代码可以很好地工作,但fun addDetail(...)的代码太复杂了,是否有一种简单的方法可以做到这一点?谢谢!

顺便说一句,在fun addDetail(...)中,aMListDetail可能为空,aMListDetail?.innerListDetail可能为空。

data class MDetail (
        val _id: Long
)


class DetailsHandler(mContext: Context = UIApp.instance) {

    data class MListDetail(val innerListDetail: MutableList<MDetail>)

    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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

BTW,在有趣的addDetail(...)中,aMListDetail可能为null,

为什么不在源头修复问题?你在构造函数中初始化它,然后告诉Kotlin它可以设置为null,但实际上你从来没有这样做过!

如果删除未使用的可为空性,则代码简化为:

class DetailsHandler(mContext: Context = UIApp.instance) {

    data class MListDetail(val innerListDetail: MutableList<MDetail>)


    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 lazyby notNull

  

和aMListDetail?.innerListDetail可能为null。

只有aMListDetail为空,您应该避免如上所述。

最后,如果您有时需要aMListDetailnull,可以写

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

(如果aMListDetailnull

,则无效)

答案 2 :(得分:0)

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

    mJson = Gson().toJson(aMListDetail)
}

8 - )