我可以在没有Java括号的情况下访问Scala对象的val吗?

时间:2011-12-08 16:12:49

标签: java scala scala-java-interop

给出以下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);

2 个答案:

答案 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语法高亮显示)。