什么替换scala中的类变量?

par*_*tic 39 static scala

在Java中,我有时使用类变量为每个新实例分配唯一的ID.我做的事情

public class Foo {

  private static long nextId = 0;

  public final long id;

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

  [...]

}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Scala中执行此操作?

Tho*_*ung 64

伴随对象上的变量:

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

class Foo{
    val i = Foo.inc
    println(i)
}
Run Code Online (Sandbox Code Playgroud)


Car*_*icz 25

放大托马斯的回答:

object定义通常与类放在同一个文件中,并且必须具有相同的名称.这会导致具有类名称的对象的单个实例,其中包含您为其定义的任何字段.

换句话说,一个方便的自己动手的Singleton构造套件.

在JVM级别,对象定义实际上导致新类的定义; 我认为它与$附加的名称相同,例如Foo$.以防万一你必须用Java来互操作这些东西.