给出以下Scala对象:
object ScalaObject {
val NAME = "Name"
}
Scala编译器似乎生成一个无参数的方法来访问NAME
字段。但是,当我尝试从Java访问此字段时,看起来访问此字段的唯一方法是作为无参数方法,如:
System.out.println(ScalaObject$.MODULE$.NAME());
有没有办法哄骗Scala编译器,允许Java按照预期的Java习惯用法访问val
:
System.out.println(ScalaObject$.MODULE$.NAME);
答案 0 :(得分:7)
严格来说,答案是否定的,因为scala不仅仅生成一个字段,而是一对访问它的方法。但是,使用val
注释scala @scala.reflect.BeanProperty
将生成Java样式的getter和setter方法。
所以虽然你不能说(在你的情况下)
ScalaObject$.MODULE$.NAME
你 能够说
ScalaObject$.MODULE$.getNAME()
这将是一个更像Java的习语,而不是你所希望的那个。
N.B。我没有尝试@BeanProperty
这样的全大写名称,所以我不确定它实际会产生什么。
答案 1 :(得分:1)
不,因为在字节码中有不同的访问字段和调用方法的指令。您必须修补Javac(以及您的IDE语法高亮显示)。