Подтвердить что ты не робот

Что заменяет переменные класса в scala?

В Java я иногда использую переменные класса для назначения уникального идентификатора каждому новому экземпляру. Я делаю что-то вроде

public class Foo {

  private static long nextId = 0;

  public final long id;

  public Foo() {
    id = nextId;
    nextId++;
  }

  [...]

}

Как это сделать в Scala?

4b9b3361

Ответ 1

Переменные на сопутствующем объекте:

object Foo{
    private var current = 0
    private def inc = {current += 1; current}
}

class Foo{
    val i = Foo.inc
    println(i)
}

Ответ 2

Чтобы усилить ответ Томаса:

Определение object обычно помещается в один файл с классом и должно иметь одно и то же имя. Это приводит к одному экземпляру объекта, имеющего имя класса, который содержит все поля, которые вы определяете для него.

Удобный собственный конструктор Singleton, другими словами.

На уровне JVM определение объекта фактически приводит к определению нового класса; Я думаю, что это одно и то же имя с приложением $, например. Foo$. На всякий случай вам придется взаимодействовать с Java.