我有这个班级
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?
。我应该怎么做才能使这项工作?我不希望它可以为空。
答案 0 :(得分:2)
如果左侧是可以为空的类型,则只需要safe call operator ?.
。在这种情况下,properties
不可为空(其类型为Properties
而非Properties?
),因此您可以将操作员关闭,并直接访问readModeOnly
属性:
var properties = Properties()
if (properties.readModeOnly) {
}
根据以下评论更新:
如果properties
可以为空,那么properties?.readModeOnly
将返回Boolean?
(因为如果null
本身,它将返回properties
是null
)。这意味着表达式现在可以评估为三个值:true
,false
或null
。
如果您认为null
为false
,则可以使用此if
支票:
if (properties?.readModeOnly == true) {
}
或者null
被视为true
,虽然这似乎违反直觉:
if (properties?.readModeOnly != false) {
}
答案 1 :(得分:0)
尝试使用?.let{}
properties?.let {
val readModeOnly = it.readModeOnly
...
}