class 'Worker' 的每个实例都应该有一个自己的 id,从 1 开始并且每次递增(1、2、3 等等)
Each instance of class 'Worker' should have an own id, starting at 1 and get incremented everytime (1, 2, 3 and so on)
上面的问题。我已经尝试过这个: 但它对我不起作用。 类好像记不住数值。
fun main() {
val worker = Worker("Frank")
val worker2 = Worker("Elvis")
println(worker.id)
println(worker2.id)
}
class Worker(val name: String) {
private val count: AtomicInteger = AtomicInteger(1)
var id = count.incrementAndGet()
}
您的 属性 是 class 的成员,因此会为 [=13= 的每个实例创建一个新的 count
属性 并分配一个新的 AtomicInteger ].您链接的 Java 示例对 count
使用静态字段,因此 class 的所有实例只有一个。在 Kotlin 中有两种方法可以做到这一点。
- 同一文件中的顶级 属性(在 class 之外定义)。
private val count: AtomicInteger = AtomicInteger(1)
class Worker(val name: String) {
val id = count.incrementAndGet()
}
- 将其放入
object
。 companion object
是此类情况的典型选择。 object
由 class 的所有实例共享。
class Worker(val name: String) {
companion object {
private val count: AtomicInteger = AtomicInteger(1)
}
val id = count.incrementAndGet()
}
上面的问题。我已经尝试过这个: 但它对我不起作用。 类好像记不住数值。
fun main() {
val worker = Worker("Frank")
val worker2 = Worker("Elvis")
println(worker.id)
println(worker2.id)
}
class Worker(val name: String) {
private val count: AtomicInteger = AtomicInteger(1)
var id = count.incrementAndGet()
}
您的 属性 是 class 的成员,因此会为 [=13= 的每个实例创建一个新的 count
属性 并分配一个新的 AtomicInteger ].您链接的 Java 示例对 count
使用静态字段,因此 class 的所有实例只有一个。在 Kotlin 中有两种方法可以做到这一点。
- 同一文件中的顶级 属性(在 class 之外定义)。
private val count: AtomicInteger = AtomicInteger(1)
class Worker(val name: String) {
val id = count.incrementAndGet()
}
- 将其放入
object
。companion object
是此类情况的典型选择。object
由 class 的所有实例共享。
class Worker(val name: String) {
companion object {
private val count: AtomicInteger = AtomicInteger(1)
}
val id = count.incrementAndGet()
}