以下代码可以很好地工作,但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)
}
}
答案 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 != null
和innerListDetail != 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 lazy
或by notNull
。
和aMListDetail?.innerListDetail可能为null。
只有aMListDetail
为空,您应该避免如上所述。
最后,如果您有时需要aMListDetail
为null
,可以写
aMListDetail?.let {
it.innerListDetail.add(aMDetail)
}
(如果aMListDetail
为null
答案 2 :(得分:0)
fun addDetail(aMDetail:MDetail){
if (aMListDetail?.innerListDetail==null){
aMListDetail=MListDetail(mutableListOf(aMDetail))
}else {
aMListDetail?.innerListDetail?.add(aMDetail)
}
mJson = Gson().toJson(aMListDetail)
}
8 - )