【发布时间】:2018-03-18 07:19:38
【问题描述】:
num 在设置时应该可以为空,但它返回的内容应该始终不可为空(具有默认值)。
class Test {
var num: Int? = null
get() = field ?: 5 // default value if null
}
即使返回的值始终为非空值,以下内容也无法编译,这对我来说很有意义,因为类型不是推断出来的,而是取自支持字段:
val a: Int = Test().num
类型不匹配:推断类型是 Int?但需要 Int
问题是如何将 getter 的返回类型更改为不可为空?如果我这样做,编译器会说:
Getter 返回类型必须等于属性的类型,即 '诠释?'
我知道我可以使用另一个属性 numNotNullable(没有支持字段)来解决它。
class Test {
var num: Int? = null
get() = field ?: 5 // default value if null
val numNotNullable: Int
get() = num ?: 5
}
val c: Int = Test().numNotNullable
但这不是我想要的。 还有其他方法吗?
【问题讨论】:
-
既然你知道它是安全的,你可以在技术上使用
.num!!。这不是很好,但在这种情况下它仍然是安全的。 -
您的支持属性解决方案绝对是正确的,它甚至是文档kotlinlang.org/docs/reference/…中支持属性的示例
标签: kotlin nullable getter non-nullable