2010-03-12 9 views
12

He estado convirtiendo algunos códigos de Java a Scala últimamente tratando de enseñarme el idioma.

Supongamos que tenemos esta clase Scala:

class Person() { 
    var name:String = "joebob" 
} 

Ahora quiero acceder a ella desde java así que no puedo usar la notación punto-como lo haría si estuviera en la Scala.

Así que puedo obtener el contenido de mi var mediante la emisión:

person = Person.new(); 
System.out.println(person.name()); 

y configurarlo a través de:

person = Person.new(); 
person.name_$eq("sallysue"); 
System.out.println(person.name()); 

Esto es así porque nuestra clase Person es la siguiente con javap:

Compiled from "Person.scala" 
public class Person extends java.lang.Object implements scala.ScalaObject{ 
    public Person(); 
    public void name_$eq(java.lang.String); 
    public java.lang.String name(); 
} 

Sí, podría escribir mis propios getters/setters pero odio llenar las clases con eso y no hace una tonelada de sentido considerando que ya los tengo; solo quiero aliar el método _ $ eq mejor. (Esto en realidad empeora cuando se trata de cosas como antlr porque entonces hay que escapar y termina luciendo como person.name _ \ $ eq ("newname");

Nota: Prefiero tener a aguantar esto en lugar de llenar mis clases con más métodos setter

Entonces, ¿qué haría usted en esta situación

Respuesta

16

puede utilizar la anotación de propiedad de bean de Scala:.?

class Person() { 
    @scala.reflect.BeanProperty 
    var name:String = "joebob" 
} 

Eso generará getName y setName por ti (es útil si necesitas int eract con las bibliotecas de Java que esperan javabeans)

Cuestiones relacionadas