【问题标题】:How do I alias the scala setter method 'myvar_$eq(myval)' to something more pleasing when in java?java - 如何在java中将scala setter方法'myvar_$eq(myval)'别名为更令人愉悦的东西?
【发布时间】:2010-03-12 18:26:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java scala setter javap scalac


    【解决方案1】:

    你可以使用Scala的bean属性注解:

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-30
      • 1970-01-01
      • 2015-05-05
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2016-08-02
      相关资源
      最近更新 更多