热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–检查null时的惯用Kotlin

在Java中,我会做这样的事情:classPerson{privateRecordrecord;publicStringname(){record().get(name);}p

在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");
}


推荐阅读
author-avatar
搜狐搜不到你的爱_276
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有