开发者

Accessing Scala instance variables from Java in Eclipse

开发者 https://www.devze.com 2023-01-23 17:56 出处:网络
I suspect I must be missing something very elementary but I can\'t seem to access Scala fields from Java code:

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消