当我尝试在Kotlin中优化init语句时,可以在哪里添加try {...}代码?

时间:2018-07-18 06:56:07

标签: android kotlin

我发现代码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

2 个答案:

答案 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)}
        }

    }