2011-09-11 18 views
10

Hay algunos archivos * .java en el árbol fuente de Scala en el directorio scala.runtime.¿Cuál es el propósito de estos archivos Java en scala.runtime?

Esos archivos parecen ser muy simples, e. gramo. DoubleRef.java se parece a esto:

package scala.runtime; 

public class DoubleRef implements java.io.Serializable { 
    private static final long serialVersionUID = 8304402127373655534L; 

    public double elem; 
    public DoubleRef(double elem) { this.elem = elem; } 
    public String toString() { return java.lang.Double.toString(elem); } 
} 

¿Hay alguna razón por la cual esas clases no se pueden definir en Scala?

+1

Solo supongo. No hay compilación de Scala compilada en el campo estático privado, y tal vez esto es requerido por java.io.Serializable para que funcione correctamente? –

+2

@Brian: En su lugar, utilizaría la anotación '@ SerialVersionUID'. – soc

Respuesta

5

Sólo una conjetura, también: no hay una construcción de Scala que se compila en un campo público - público var s en Scala compilar a un campo privado y a un acceso público y un mutador. Como imagino que esas clases *Ref se usan ampliamente, esto podría ser una optimización para evitar llamadas a métodos frecuentes y reemplazarlas con acceso directo al campo.

+0

Eso suena plausible, pero no declarar esos métodos 'final' tendría el mismo efecto al dejar que Java los optimice? – Owen

+0

No lo sé - tal vez la idea es no requerir que nadie (compilador o JVM) haga ninguna optimización aquí ... –

Cuestiones relacionadas