Как я искажаю scala метод установщика 'myvar_ $eq (myval)' к чему-то более приятному когда в Java?

Я преобразовывал некоторый код от 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");

Примечание: Я должен очень выносить это, а не заполнить мои классы большим количеством методов установщика.

Таким образом, что Вы сделали бы в этой ситуации?

13
задан soc 21 July 2012 в 14:02
поделиться

1 ответ

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

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

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

17
ответ дан 1 December 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: