В последнее время я конвертировал некоторый код из Java в Scala, пытаясь научить себя языку.
Предположим, у нас есть класс scala:
class Person() {
var name:String = "joebob"
}
Теперь я хочу получить к нему доступ из Java , поэтому я не могу использовать точечные обозначения, как если бы я был в Scala.
Так что я могу получить содержимое моего var, набрав:
person = Person.new();
System.out.println(person.name());
и установите его с помощью:
person = Person.new();
person.name_$eq("sallysue");
System.out.println(person.name());
Это верно, потому что наш класс Person выглядит следующим образом в 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();
}
Да, я мог бы написать свои собственные методы получения / установки, но я ненавижу заполнять классы этим, и это не имеет большого смысла, учитывая, что они у меня уже есть - я просто хочу лучше псевдоним метода _ $ eq. (Это на самом деле ухудшается, когда вы имеете дело с такими вещами, как antlr, потому что тогда вам нужно избегать этого, и в итоге это выглядит как person.name _ \ $ eq ("newname");
Примечание: я бы предпочел смириться с этим, а не заполнять свои классы более сеттерными методами.
Так что бы вы сделали в этой ситуации?