Singletons Scala anidados del código Java

Tengo el siguiente código Scala (2.8):

object A {
  val message = "hello"
  object B {
    val message = "world"
  }
}

Y una clase de Java similar:

public class C {
  public static String message() {
    return "HELLO";
  }
  public static class D {
    public static String message() {
      return "WORLD";
    }
  }
}

Estos funcionan como esperaba cuando los llamo desde 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

Pero cuando intento algo similar de Java, al compilador no le gusta la segunda línea:

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());

Está claro por qué este es el caso cuando miro los archivos de clase conjavap. Sé que puedo usar

System.out.println(A$B$.MODULE$.message());

en su lugar, o agregue algo comoval getB = B para miA objetar y reemplazar la segunda línea con

System.out.println(A.getB().message());

¿Hay una forma estándar de usar objetos anidados Scala singleton del código Java?

Respuestas a la pregunta(2)

Su respuesta a la pregunta