2009-12-11 12 views
36

En Java a veces uso variables de clase para asignar una ID única a cada nueva instancia. Hago algo como¿Qué reemplaza las variables de clase en Scala?

public class Foo { 

    private static long nextId = 0; 

    public final long id; 

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

    [...] 

} 

¿Cómo puedo hacer esto en Scala?

Respuesta

60

variables en el objeto acompañante:

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

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

Para amplificar el Thomas' respuesta:

La definición object generalmente se coloca en el mismo archivo con la clase, y necesidad tienen el mismo nombre . Esto da como resultado una única instancia de un objeto que tiene el nombre de la clase, que contiene los campos que usted defina.

Un práctico kit de construcción individual "hazlo tú mismo", en otras palabras.

En el nivel JVM, la definición del objeto realmente da como resultado la definición de una nueva clase; Creo que es el mismo nombre con un $ anexado, p. Ej. Foo$. En caso de que tenga que interoperar algo de esto con Java.

+1

Los objetos no tienen que tener el mismo nombre que las clases, solo _companion objects_ do. – rightfold

+1

Tendemos a usar el mismo nombre para clase y objeto, ya que ayuda mucho en la depuración del código. –

+0

Estas dos respuestas deben combinarse – Florian

Cuestiones relacionadas