我发现代码A中有一些冗余代码,看来我不需要使用init语句。
因此,我尝试将其优化到代码B中,但是我不知道如何在代码B中添加try {...}
,您知道有必要在日志中写入错误,如何添加{{1 }}在代码B中?谢谢!
代码A
try{...} catch (e:Exception){...}
代码B
class DetailsHandler(mContext: Context = UIApp.instance) {
var mJson: String by PreferenceTool(mContext, mContext.getString(R.string.SavedJsonName), "")
private var listofMDetail: MutableList<MDetail>?=null
init {
try{
listofMDetail = myGson.fromJson<MutableList<MDetail>>(mJson)
}catch(e:Exception) {
e.message?.let{ logError("Paser: "+it)}
}
}
}
致伏特丹:
谢谢!
class DetailsHandler(mContext: Context = UIApp.instance) {
var mJson: String by PreferenceTool(mContext, mContext.getString(R.string.SavedJsonName) , "")
private var listofMDetail: MutableList<MDetail>?= myGson.fromJson<MutableList<MDetail>>(mJson)
}
来自listofMDetail
因此,如果需要使用有趣的myGson.fromJson(mJson)
,则必须将listofMDetail
定义为var。当addDetail
为空时,我需要将mutableListOf(aMDetail)
分配给listofMDetail
。
您有更好的方法吗?
listofMDetail
答案 0 :(得分:2)
只需使用try
块作为表达式即可。然后,您可以将var
放入val
。
class DetailsHandler(mContext: Context = UIApp.instance) {
val mJson: String by PreferenceTool(mContext, mContext.getString(R.string.SavedJsonName), "")
private val listofMDetail: MutableList<MDetail>? =
try{
myGson.fromJson(mJson)
}catch(e:Exception) {
e.message?.let{ logError("Paser: "+it)}
null
}
}
此外,我不建议记录异常并在listofMDetail
中将其设置为null。它将使所有其他使用的代码复杂化。抛出异常似乎是一个更适当的解决方案:
private val listofMDetail: MutableList<MDetail> =
try{
myGson.fromJson(mJson) ?: mutableListOf()
}catch(e:Exception) {
e.message?.let{ logError("Paser: "+it)}
throw RuntimeError(e)
}
一些重构代码:
private val listofMDetail: MutableList<MDetail> =
try{
myGson.fromJson(mJson) ?: mutableListOf()
} catch(e: Exception) {
logError("Can't find $mJson in $myGson; Error: ${e.message}")
mutableListOf()
}
答案 1 :(得分:0)
您可以执行以下操作
class DetailsHandler(mContext: Context = UIApp.instance)
{
Private var listofMDetail: MutableList<MDetail> = mutableListOf()
var mJson: String by PreferenceTool(mContext, mContext.getString(R.string.SavedJsonName) , "")
try {
listofMDetail: MutableList<MDetail>?= myGson.fromJson<MutableList<MDetail>>(mJson)
}catch (e:Exception)
{
e.message?.let{ logError("Paser: "+it)}
}
}