我刚接触 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?
)。当我尝试从另一个类中访问此字段时,我必须使用非空检查:thePlayer.id!!
。但是我的应用程序逻辑是id
字段永远不会为空 (mongo在创建Player实例并立即设置id字段后)。而我不想在每个地方都进行非空检查。
我尝试创建一个非空的getter,但它无法编译:
var id: ObjectId? = null
get(): ObjectId = id!!
我也可以为id创建一些存根并在构造函数中使用它,但这看起来像是一个肮脏的hack:
val DUMMY_ID = new ObjectId("000000000000000000000000");
那么有没有解决这个问题的变通方法?
lateinit
,它基本上意味着不用担心如何初始化,我会确保它被初始化。 - succcubbus