8

给定以下 Scala 对象:

object ScalaObject {
    val NAME = "Name"
}

Scala 编译器似乎生成了一个无参数方法来访问该NAME字段。但是,当我尝试从 Java 访问此字段时,似乎访问此字段的唯一方法是作为无参数方法,例如:

System.out.println(ScalaObject$.MODULE$.NAME());

有没有办法哄 Scala 编译器允许 Java 访问val每个预期的 Java 习惯用法:

System.out.println(ScalaObject$.MODULE$.NAME);
4

2 回答 2

7

严格来说,答案是否定的,因为 scala 生成的不仅仅是一个字段,而是一对访问它的方法。然而,用 scala 注释val@scala.reflect.BeanProperty产生 Java 风格的 getter 和 setter 方法。

所以虽然你不能说(在你的情况下)

ScalaObject$.MODULE$.NAME

可以

ScalaObject$.MODULE$.getNAME()

这将是一个更像 Java 的惯用语,只是不是您希望的那种。

注意我没有尝试过@BeanProperty这样的全大写名称,所以我不确定它实际会产生什么。

于 2011-12-08T19:28:41.183 回答
1

不,因为在字节码中有不同的指令来访问字段和调用方法。然后,您必须修补 Javac(以及您的 IDE 语法荧光笔)。

于 2011-12-08T16:17:37.777 回答