编程语言
首页 > 编程语言> > java – 检查null时的惯用Kotlin

java – 检查null时的惯用Kotlin

作者:互联网

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)),我会收到此错误:

Smart cast to “Record” is impossible, because “record” is a mutable
property that could have been changed by this time

解决方法:

在惯用的Kotlin中,你会使用lazy delegated property

class Person(private val service: Service) {

    private val record by lazy { service.doSomething() }

    fun name() = record.get("name");
}

标签:idiomatic,java,kotlin
来源: https://codeday.me/bug/20190827/1745738.html