如何在java中将scala setter方法“myvar_$eq(myval)”别名为更令人愉悦的东西?

2022-09-04 20:31:37

我最近一直在将一些代码从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();
}

是的,我可以编写自己的 getters/setters,但我讨厌用它来填充类,考虑到我已经有了它们,这并没有多大意义 - 我只想更好地别名 _$eq 方法。(当你处理像antlr这样的东西时,这实际上会变得更糟,因为这样你就必须逃避它,它最终看起来像 person.name_\$eq(“newname”);

注意:我宁愿忍受这一点,也不愿用更多的 setter 方法来填充我的类。

那么在这种情况下你会怎么做呢?


答案 1

您可以使用 Scala 的 bean 属性注释:

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

这将为您生成getName和setName(如果您需要与需要javabean的Java库进行交互,则很有用)


答案 2

推荐