Вложенные синглтоны Scala из кода Java
У меня есть следующий код 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());
Существует ли стандартный способ использования вложенных одноэлементных объектов Scala из кода Java?