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