Kotlin - 如何摆脱这个编译错误?

时间:2018-06-06 11:58:17

标签: kotlin

我有这个班级

data class Properties( val actionBarColor : Int , val fileName : String) : 
 Serializable{
var title : String = ""
var readModeOnly : Boolean = false
}

和if if condition

var properties = Properties()

if(properties?.readModeOnly){

}

但是编译器说,Boolean找到Boolean?。我应该怎么做才能使这项工作?我不希望它可以为空。

2 个答案:

答案 0 :(得分:2)

如果左侧是可以为空的类型,则只需要safe call operator ?.。在这种情况下,properties不可为空(其类型为Properties而非Properties?),因此您可以将操作员关闭,并直接访问readModeOnly属性:

var properties = Properties()

if (properties.readModeOnly) {

}

根据以下评论更新:

如果properties 可以为空,那么properties?.readModeOnly将返回Boolean?(因为如果null本身,它将返回propertiesnull)。这意味着表达式现在可以评估为三个值:truefalsenull

如果您认为nullfalse,则可以使用此if支票:

if (properties?.readModeOnly == true) {

}

或者null被视为true,虽然这似乎违反直觉:

if (properties?.readModeOnly != false) {

}

答案 1 :(得分:0)

尝试使用?.let{}

properties?.let {
    val readModeOnly = it.readModeOnly
    ...
}