gpt4 book ai didi

java - Kotlin - 可空字段的非空 getter

转载 作者:IT老高 更新时间:2023-10-28 13:45:53 24 4
gpt4 key购买 nike

我是 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 创建一些 stub 并在构造函数中使用它,但这看起来像一个肮脏的黑客:

val DUMMY_ID = new ObjectId("000000000000000000000000");

那么有没有办法解决这个问题?

最佳答案

我个人在类似情况下使用前缀为 _ + public val 的私有(private) 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

关于java - Kotlin - 可空字段的非空 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com