我有以下 Scala (2.8) 代码:
object A {
val message = "hello"
object B {
val message = "world"
}
}
还有一个类似的 Java 类:
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 知之甚少,但考虑到 the way Scala is compiled into bytecode ,我认为您已经公开了仅有的两个选项。
关于java - 来自 Java 代码的嵌套 Scala 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559714/