在Kotlin中是否有一个简单的代码来实现fun addDetail?

在Kotlin中是否有一个简单的代码来实现fun addDetail?,kotlin,Kotlin,下面的代码可以很好地工作,但是fun addDetail(…)的代码太复杂了,有简单的方法吗?谢谢 顺便说一句,在fun addDetail(…)中,amlistdail可能为空,而amlistdail?.innerListDetail可能为空 data class MDetail ( val _id: Long ) class DetailsHandler(mContext: Context = UIApp.instance) { data class MList

下面的代码可以很好地工作,但是
fun addDetail(…)
的代码太复杂了,有简单的方法吗?谢谢

顺便说一句,在
fun addDetail(…)
中,
amlistdail
可能为空,而
amlistdail?.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)
    }

}
数据类MDetail(
val_id:Long
)
类DetailsHandler(mContext:Context=UIApp.instance){
数据类MListDetail(val innerListDetail:MutableList)
私有var aMListDetail:MListDetail?
var mJson:PreferenceTool字符串(mContext,“mySavedJson”和“”)
初始化{
aMListDetail=Gson().fromJson(mJson,MListDetail::class.java)
}
乐趣添加详细信息(aMDetail:MDetail){
如果(aMListDetail==null){
aMListDetail=MListDetail(可变列表(aMDetail))
}否则{
if(aMListDetail?.innerListDetail==null){
aMListDetail=MListDetail(可变列表(aMDetail))
}否则{
aMListDetail?.innerListDetail?.add(aMDetail)
}
}
mJson=Gson().toJson(aMListDetail)
}
}
8-)

8-)

备选方案:

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

    aMListDetail.innerListDetail.add(aMDetail)
    mJson = Gson().toJson(aMListDetail)
}
add()
调用中不需要空安全
?。
运算符,因为此时您已经检查了
aMListDetail!=空值
innerListDetail!=空

备选方案:

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

    aMListDetail.innerListDetail.add(aMDetail)
    mJson = Gson().toJson(aMListDetail)
}
add()
调用中不需要空安全
?。
运算符,因为此时您已经检查了
aMListDetail!=空值
innerListDetail!=空

顺便说一句,在有趣的addDetail(…)中,aMListDetail可能为空

为什么不从源头上解决问题呢?您在构造函数中初始化它,然后告诉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)
    }

}
(如果
aMListDetail
null
,则不执行任何操作)

顺便说一句,在有趣的addDetail(…)中,aMListDetail可能为空

为什么不从源头上解决问题呢?您在构造函数中初始化它,然后告诉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)
    }

}

(如果
aMListDetail
null
,则此选项无效)

我投票将此问题作为离题问题关闭,因为它应该在codereview.stackexchange.comI上提问。我投票将此问题作为离题问题关闭,因为它应该在codereview.stackexchange.Com上提问。谢谢!但是您的代码不考虑情况>代码> AMListField..nNeListDebug=null < /C>。在我的代码中,我将在
amlistdail?时执行'amlistdail=MListDetail(mutableListOf(aMDetail))`innerListDetail==null
@HelloCW,这是因为我认为Gson().fromJson()将返回null
amlistdail
或非null
amlistdail.innerListDetail
,并且永远不会返回null
aMListDetail.innerListDetail
。换句话说,如果
aMListDetail!=null
那么您也知道
amlistdail.innerListDetail!=空
。但是,如果你想防御性地编程,那么一定要使用
if(aMListDetail?.innerListDetail==null)
而不仅仅是
if(aMListDetail==null)
。顺便说一句,我想我可以知道对象aMListDetail不是null而是aMListDetail.innerListDetail是null用户可能会在“mySavedJson”中存储错误数据,所以
var mJson:String by PreferenceTool(mContext,“mySavedJson”和“”)
可能会导致aMListDetail.innerListDetail为null
数据类MDetail(…)
在我的应用程序中是复杂的类,我跳过了一些内容谢谢!但是您的代码不考虑情况>代码> AMListField..nNeListDebug=null < /C>。在我的代码中,我将在
amlistdail?时执行'amlistdail=MListDetail(mutableListOf(aMDetail))`innerListDetail==null
@HelloCW,这是因为我认为Gson().fromJson()将返回null
amlistdail
或非null
amlistdail.innerListDetail
,并且永远不会返回null
aMListDetail.innerListDetail
。换句话说,如果
aMListDetail!=null
那么您也知道
amlistdail.innerListDetail!=空
。但是,如果你想防御性地编程,那么一定要使用
if(aMListDetail?.innerListDetail==null)
而不仅仅是
if(aMListDetail==null)
。顺便说一句,我想我可以知道对象aMListDetail不是null而是aMListDetail.innerListDetail是null用户可能会在“mySavedJson”中存储错误数据,所以
var mJson:String by PreferenceTool(mContext,“mySavedJson”和“”)
可能会导致aMListDetail.innerListDetail为null
数据类MDetail(…)
在我的应用程序中是复杂的类,我跳过了一些内容
aMListDetail?.let {
  it.innerListDetail.add(aMDetail)
}