Ответ 1
Переменные на сопутствующем объекте:
object Foo{
private var current = 0
private def inc = {current += 1; current}
}
class Foo{
val i = Foo.inc
println(i)
}
В Java я иногда использую переменные класса для назначения уникального идентификатора каждому новому экземпляру. Я делаю что-то вроде
public class Foo {
private static long nextId = 0;
public final long id;
public Foo() {
id = nextId;
nextId++;
}
[...]
}
Как это сделать в Scala?
Переменные на сопутствующем объекте:
object Foo{
private var current = 0
private def inc = {current += 1; current}
}
class Foo{
val i = Foo.inc
println(i)
}
Чтобы усилить ответ Томаса:
Определение object
обычно помещается в один файл с классом и должно иметь одно и то же имя. Это приводит к одному экземпляру объекта, имеющего имя класса, который содержит все поля, которые вы определяете для него.
Удобный собственный конструктор Singleton, другими словами.
На уровне JVM определение объекта фактически приводит к определению нового класса; Я думаю, что это одно и то же имя с приложением $
, например. Foo$
. На всякий случай вам придется взаимодействовать с Java.