Подтвердить что ты не робот

Как я могу использовать метод scala setter 'myvar_ $eq (myval)' для чего-то более приятного, когда в java?

Я недавно конвертировал код из java в scala, пытаясь научить себя языку.

Предположим, что этот класс scala:

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

Теперь я хочу получить доступ к нему из java, поэтому я не могу использовать dot-notation, как если бы я был в 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" );

Примечание. Мне бы скорее пришлось смириться с этим, а не заполнять мои классы более сложными методами.

Итак, что бы вы сделали в этой ситуации?

4b9b3361

Ответ 1

Вы можете использовать аннотацию свойства Scala bean:

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

Это будет генерировать getName и setName для вас (полезно, если вам нужно взаимодействовать с библиотеками Java, которые ожидают javabeans)