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)
严格来说,答案是否定的,因为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像这样的全大写的名字,所以我不确定它会实际产生什么.
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |