在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()将返回nullamlistdail
或非nullamlistdail.innerListDetail
,并且永远不会返回nullaMListDetail.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()将返回nullamlistdail
或非nullamlistdail.innerListDetail
,并且永远不会返回nullaMListDetail.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)
}