I suspect I must be missing something very elementary but I can't seem to access Scala fields from Java code:
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);
}
}
Yields:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The field TestScala.myNum is not visible
This Assembla ticket touches on the subject but my tiny cranium cannot parse a useful solution:
http://scala-ide.assembla.com/spaces/scala-ide/tickets/1238-objects-not-visible-to-ja开发者_JAVA技巧va-in-mixed-java-scala-eclipse-project
Thanks
Val fields are accessed through methods with same name.
scalac -Xprint:typer will show you that:
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
}
So in Java int x = t.myNum();
works.
精彩评论