使用 Scala class & object 在 Java 中使用 "fine" 语法访问内部 class 方法

Access inner class method with "fine" syntax in Java using Scala class & object

我有以下 Scala 示例:

class Nested {}
object Nested {
  class Inner {}
  object Inner {
    def x = 321
  }
}

使用 JUnit 测试专门测试我可以 Nested.Inner.x() 并在没有 Nested.Inner$.MODULE$.x() 的情况下自由调用该方法:

  import static junit.framework.Assert.*;
  import org.junit.Test;

  public class TestFromJava {

  @Test
  public void accessTest() {
    assertEquals(321, Nested.Inner.x());
  }
}

这可以编译,但在 运行 测试时,我得到 (sbt test):

[error] TestFromJava.java:8: cannot find symbol
[error]   symbol:   method x()
[error]   location: class Nested.Inner
[error] Nested.Inner.x

我怎样才能既受益于 Scala 语法又不使用可怕的 $?也许这是语言的一个特性,因为它如何生成 object 个实例。

从 Java 调用时,您必须限定单例 object 访问权限,如 explained in this question

你的情况是

Nested.Inner$.MODULE$.x()