在定义null局部变量并稍后在方法中设置时,必需Nothing错误

时间:2017-09-13 08:20:43

标签: android kotlin

我定义的变量是null,但后来基于view.tag对象类型我必须设置它。但是它说Required Nothing found RequestCenterDetails。以下是我尝试这样做的方法

 holder?.addressIcon?.setOnClickListener {

        val tagObject = holder.institutecardView.getTag(R.id.item_institute_cardview)
        var center=null

        if(tagObject is RequestCenterDetails)
        {
            Log.d("location","-------------TEST----------- its a RequestCenter")
            center=tagObject as RequestCenterDetails // over here it say "Required Nothing found RequestCenterDetails"
        }
        else if(tagObject is Center)
        {
            Log.d("location","-------------TEST----------- its a Center")
        }

问题是我必须根据字段值采取相同的操作,但两个对象都有不同的字段名称。有没有更好的方法来做到这一点。我是kotlin的新手。

3 个答案:

答案 0 :(得分:4)

如果您知道center将是RequestCenterDetails,请执行

var center: RequestCenterDetails? = null

如果center也可以是其他类型,请执行

 var center: Any? = null

您正在做的更简洁的版本是:

var center: RequestCenterdetails? = tagObject as? RequestCenterDetails

如果tagObjecttagObject,则将RequestRecenterDetails的值指定为中心,否则为其分配null

答案 1 :(得分:1)

原因是,您的变量center的类型为Nothing?。 你可以这样说:

var center: Any? = null

但这不适合使用这种通用类型。

答案 2 :(得分:0)

您只需要指定类型,因为编译器不清楚,我建议您在层次结构中放置尽可能高的常用类型(对于RequestCenterDetails和{{1如果您可以接受任何类型,则只需Center

Any

var center: Any = null