来自 Java 代码的嵌套 Scala 单例

2022-09-03 08:10:50

我有以下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 = BA

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

有没有一种标准的方法可以从Java代码中使用嵌套的Scala单例对象?


答案 1

我对Scala知之甚少,但考虑到Scala编译成字节码的方式,我认为你已经暴露了你仅有的两个选项。


答案 2

推荐