【发布时间】:2017-04-04 15:38:17
【问题描述】:
我是 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 创建一些存根并在构造函数中使用它,但这看起来像一个肮脏的黑客:
val DUMMY_ID = new ObjectId("000000000000000000000000");
那么有没有办法解决这个问题?
【问题讨论】:
-
把
lateinit放在你的变量之前,这基本上意味着,不要打扰如何,但我确保它会被初始化
标签: java nullpointerexception kotlin getter non-nullable