2010-03-12 25 views
12

J'ai converti du code de java en scala dernièrement essayant de m'enseigner la langue.

Supposons que nous ayons cette classe scala:

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

Maintenant, je veux y accéder de java je ne peux pas utiliser le notation comme je le ferais si j'étais scala.

Je peux obtenir mon contenu de var en émettant:

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

et le mettre via:

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

Cela est vraie cause notre cette personne de classe ressemble à 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(); 
} 

Oui, je pourrais écrire mes propres getters/setters mais je déteste remplir des classes avec ça et ça ne fait pas une tonne de sens étant donné que je les ai déjà - je veux juste alias la méthode _ $ eq mieux. (Cela devient pire quand vous avez affaire à des choses comme antlr parce que vous devez y échapper et ça finit par ressembler à personne.name _ \ $ eq ("newname");

Note: Je préférerais avoir de mettre en place avec cela plutôt que de remplir mes cours avec d'autres méthodes setter

Alors, que feriez-vous dans cette situation

Répondre

16

vous pouvez utiliser l'annotation de la propriété de caroube Scala.?

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

cela va générer getName et setName pour vous (utile si vous avez besoin d'int eract avec les bibliothèques Java qui attendent javabeans)