Mar*_*tin 8 java scala scala-java-interop
我目前正在评估Scala的未来项目,并遇到了一些奇怪的事情.我在JSP中为我们创建了以下常量:
val FORMATED_TIME = "formatedTime";
Run Code Online (Sandbox Code Playgroud)
它没有用.经过一些实验,我决定反编译以找到它的底部:
private final java.lang.String FORMATED_TIME;
public java.lang.String FORMATED_TIME();
Code:
0: aload_0
1: getfield #25; //Field FORMATED_TIME:Ljava/lang/String;
4: areturn
Run Code Online (Sandbox Code Playgroud)
现在这很有趣!就个人而言,我一直想知道为什么检查员需要前缀get和mutator前缀在Java中设置,因为它们位于不同的名称空间中.
然而,向团队的其他成员解释这可能仍然很尴尬.那么没有检查员就可以有一个公共常数吗?
olu*_*ies 11
这是因为统一访问原则,即:方法和字段无法区分
看到这个答案
在Scala 2.8.0中,这意味着如果您有一个伴随对象,则会丢失静态转发器)
如果你在Scala中有这个:
//Scala
object CommonControler {
val FORMATED_TIME = "formatedTime";
}
Run Code Online (Sandbox Code Playgroud)
你可以在Java中使用它
//Java
// Variables become methods
CommonControler$.MODULE$.FORMATED_TIME();
// A static forwarder is avaliable
CommonControler.FORMATED_TIME();
Run Code Online (Sandbox Code Playgroud)
另请参阅Scala in Depth一书
另请注意类的@ scala.reflect.BeanProperty.
| 归档时间: |
|
| 查看次数: |
3750 次 |
| 最近记录: |