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 中有两种方法可以做到这一点。

  1. 同一文件中的顶级 属性(在 class 之外定义)。
private val count: AtomicInteger = AtomicInteger(1)

class Worker(val name: String) {
    val id = count.incrementAndGet()
}
  1. 将其放入 objectcompanion object 是此类情况的典型选择。 object 由 class 的所有实例共享。
class Worker(val name: String) {

    companion object {
        private val count: AtomicInteger = AtomicInteger(1)
    }

    val id = count.incrementAndGet()
}