[英]Kotlin - nonnull getter for a nullable field
我是Kotlin的新手,我尝试将一个小型Java项目改造成这种新语言。 我在我的项目中使用mongodb,我有一个类,例如:
class PlayerEntity {
constructor() {} //for mongodb to create an instance
constructor(id: ObjectId, name: String) { //used in code
this.id = id
this.name = name
}
@org.mongodb.morphia.annotations.Id
var id: ObjectId? = null
var name: String? = null
}
由于空构造函数,我必须将id
字段标记为可空( var id: ObjectId?
)。 当我尝试从另一个类访问此字段时,我必须使用非null检查: thePlayer.id!!
。 但我的应用程序的逻辑是id
字段永远不为null(mongo创建一个Player的实例并立即设置id字段)。 而且我不想在任何地方进行非空检查。
我试图创建一个非null的getter,但它不能编译:
var id: ObjectId? = null
get(): ObjectId = id!!
我也可以为id创建一些存根,并在构造函数中使用它,但这看起来像一个肮脏的黑客:
val DUMMY_ID = new ObjectId("000000000000000000000000");
那么有解决问题的解决方法吗?
我个人在类似的情况下使用以_
+ public val为前缀的私有var。
class Example<out T> {
private var _id: T? = null
val id: T
get() = _id!!
}
对于您的情况,它看起来像这样:
@org.mongodb.morphia.annotations.Id
private var _id: ObjectId? = null
val id: ObjectId
get() = _id!!
或者,像这样将您的变量声明为lateinit
(但请注意,这会公开公开setter):
@org.mongodb.morphia.annotations.Id
lateinit var id: ObjectId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.