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

Jef*_*rod 8 java scala scala-java-interop

给定以下Scala对象:

object ScalaObject {
    val NAME = "Name"
}
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(ScalaObject$.MODULE$.NAME());
Run Code Online (Sandbox Code Playgroud)

有没有办法哄骗Scala编译器,允许Java val按照预期的Java习惯用法访问:

System.out.println(ScalaObject$.MODULE$.NAME);
Run Code Online (Sandbox Code Playgroud)

Ian*_*ird 7

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

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

ScalaObject$.MODULE$.NAME
Run Code Online (Sandbox Code Playgroud)

可以说

ScalaObject$.MODULE$.getNAME()
Run Code Online (Sandbox Code Playgroud)

这将是一个更像Java的习语,而不是你希望的那个.

NB我没有试过@BeanProperty像这样的全大写的名字,所以我不确定它会实际产生什么.