我怀疑我一定遗漏了一些非常基本的东西,但我似乎无法从 Java 代码访问 Scala 字段:
package test;
class TestScala (myNumber : Int){
val myNum : Int = myNumber;
}
package test;
import test.TestScala;
public class TestJava {
public static void main(String[] args) {
TestScala t = new TestScala(2);
int x = t.myNum;
System.out.println(x);
}
}
产量:
线程“main”中的异常 java.lang.Error: Unresolved 编译问题: 字段 TestScala.myNum 不可见
这张 Assembla 票涉及到这个主题,但我的小脑袋无法解析有用的解决方案:
谢谢
最佳答案
通过同名方法访问 Val 字段。
scalac -Xprint:typer 会告诉你:
class TestScala extends java.lang.Object with ScalaObject {
<paramaccessor> private[this] val myNumber: Int = _;
def this(myNumber: Int): $iw.$iw.TestScala = {
TestScala.super.this();
()
};
private[this] val myNum: Int = TestScala.this.myNumber;
<stable> <accessor> def myNum: Int = TestScala.this.myNum
}
因此在 Java 中 int x = t.myNum();
有效。
关于java - 在 Eclipse 中从 Java 访问 Scala 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119231/