什么替换了scala中的类变量?

什么替换了scala中的类变量?,scala,static,Scala,Static,在Java中,我有时使用类变量为每个新实例分配一个唯一的ID。我做一些类似的事情 公共类Foo{ 私有静态长nextId=0; 公共最终长id; 公共食物({ id=nextId; nextId++; } [...] } 如何在Scala中执行此操作?伴生对象上的变量: object Foo{ private var current = 0 private def inc = {current += 1; current} } class Foo{ val i = F

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

公共类Foo{
私有静态长nextId=0;
公共最终长id;
公共食物({
id=nextId;
nextId++;
}
[...]
}

如何在Scala中执行此操作?

伴生对象上的变量:

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

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

为了进一步说明托马斯的回答:

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

换句话说,一个方便的自己动手的单例构造工具包


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

对象不必与类同名,只有伴生对象才可以。我们倾向于对类和对象使用相同的名称,因为这有助于调试代码。这两个答案应该结合起来