【发布时间】:2019-04-26 20:16:00
【问题描述】:
在 Java 中,我会这样做:
class Person {
private Record record;
public String name() {
record().get("name");
}
private Record record() {
if (record == null) {
refetch();
}
return record;
}
private void refetch() {
record = service.doSomething()
}
}
在 Kotlin 中,我有这个等价的代码:
class Person(private var record: Record?) {
fun name() : String {
record().get("name");
}
private fun record() : Record {
record ?: refetch()
return record!!;
}
private fun refetch() {
record = service.doSomething()
}
}
如您所见,我使用的是!! 运算符,但我不太喜欢。还有另一种更惯用的方法吗?
如果我只是按照 Java 方式(if (record == null)),我会得到这个错误:
智能转换为“记录”是不可能的,因为“记录”是可变的 此时可能已更改的属性
【问题讨论】:
-
为什么要对 null 安全类型使用 null 检查?
-
@Zoe 抱歉,我错过了
?。错字 -
在 Kotlin 中,您将使用惰性初始化委托属性:kotlinlang.org/docs/reference/delegated-properties.html#lazy