使用 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()
我有以下 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()