使用Eclipse IDE时,我无法从Java代码中引用Scala类。有问题的Scala类嵌套在Scala对象结构中。当尝试在Java代码中使用该类时,Eclipse抱怨使用二进制名称。
以下是定义感兴趣的类(Inner
)的Scala代码示例:
package mypackage;
object Outer {
object Middle {
class Inner {
def msg() {
println("Running");
}
}
}
}
要在Java代码中使用类Inner
,我使用以下代码:
mypackage.Outer$Middle$Inner inner = new mypackage.Outer$Middle$Inner();
inner.msg();
但是,Eclipse(Indigo)编译器在第一行抱怨以下消息:
嵌套类型mypackage.Outer $ Middle $ Inner无法使用其二进制名称
引用
有趣的是,上面的Java代码在与NetBeans 6.9.1一起使用时可以正常工作。
这是Eclipse编译器的问题吗?是否有允许使用二进制名称的标志?或者,这是Scala的问题还是我使用它的方式?
答案 0 :(得分:1)
无法从Java访问深层嵌套对象。无论是Eclipse,命令行还是任何构建工具。字节码转换丢失了嵌套信息。
Eclipse不允许您使用$
名称,因此会抱怨。如果你关心Java互操作,你应该坚持使用类似Java的Scala。顶级类,纯粹特征或抽象类,没有高阶方法等。