Java代码中的嵌套Scala单例
我有以下Scala(2.8)代码: 和一个类似的Java类:Java代码中的嵌套Scala单例,java,scala,Java,Scala,我有以下Scala(2.8)代码: 和一个类似的Java类: public class C { public static String message() { return "HELLO"; } public static class D { public static String message() { return "WORLD"; } } } 当我从Scala中调用它们时,它们可以正常工作: scala> A.message
public class C {
public static String message() {
return "HELLO";
}
public static class D {
public static String message() {
return "WORLD";
}
}
}
当我从Scala中调用它们时,它们可以正常工作:
scala> A.message
res0: java.lang.String = hello
scala> A.B.message
res1: java.lang.String = world
scala> C.message
res2: java.lang.String = HELLO
scala> C.D.message
res3: java.lang.String = WORLD
但是,当我尝试Java中类似的东西时,编译器不喜欢第二行:
System.out.println(A.message());
System.out.println(A.B.message()); // cannot find ... symbol : variable B ...
System.out.println(C.message());
System.out.println(C.D.message());
当我使用javap
查看类文件时,很清楚为什么会出现这种情况。我知道我可以用
System.out.println(A$B$.MODULE$.message());
相反,或者将类似于val getB=B
的内容添加到我的A
对象中,并将第二行替换为
System.out.println(A.getB().message());
有没有标准的方法可以使用Java代码中的嵌套Scala单例对象?我对Scala知之甚少,但考虑到这一点,我认为您已经公开了仅有的两个选项。嗯,
a$B$.MODULE$
是一种标准方法,即使它不是一种特别好的标准方法。
System.out.println(A.getB().message());