java - 来自 Java 代码的嵌套 Scala 单例

标签 java scala

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

相关文章:

java - java.io.IOException:方案:maprfs没有文件系统。将maprfs jar添加到bash_profile无效

java - 如何使用 Apache http 客户端进行 httpDelete?在java中

java - 在不保持 Eclipse 窗口处于 Activity 状态的情况下自动在 Eclipse 中发布应用程序

java 相当于 python syslog.syslog()

java - 在没有 Activity 的另一个类文件中使用 Toast 扩展了 Android

scala - 如何检索由 scala-dispatch 生成的请求的正文字符串

java - 如何使用插件 DevKit 在项目树中设置文件突出显示颜色

scala - 在客户端/服务器之间共享类型安全 RPC,但使用 REST 方法

javascript - 如何从 Scala (JVM) 中运行 JavaScript 代码?

java - 在 SBT/Play 中的构建定义内运行 Java 方法