O que substitui variáveis de classe em scala?

em Java, às vezes, uso variáveis de classe para atribuir um ID único a cada instância nova. Eu faço algo como

public class Foo {

  private static long nextId = 0;

  public final long id;

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

  [...]

}
Como posso fazer isto em Scala?

Author: Tautvydas, 2009-12-11

2 answers

Variáveis sobre o objecto companheiro:

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

class Foo{
    val i = Foo.inc
    println(i)
}
 61
Author: Thomas Jung, 2009-12-11 15:30:18
Para amplificar a resposta do Thomas:

A definição {[[0]} é normalmente colocada no mesmo ficheiro com a classe, e deve ter o mesmo nome. Isto resulta em uma única instância de um objeto que tem o nome da classe, que contém quaisquer campos que você define para ele.

Um kit de construção Singleton, por outras palavras.

A nível da JVM, a definição do objecto resulta na definição de uma nova classe; penso que é o mesmo nome com um $ anexo, por exemplo Foo$. Só para o caso de teres de interoperar algumas destas coisas com Java.

 25
Author: Carl Smotricz, 2009-12-11 15:21:42