Доступ к переменным экземпляра Scala из Java в Eclipse - PullRequest
4 голосов
/ 07 ноября 2010

Я подозреваю, что мне не хватает чего-то очень элементарного, но я не могу получить доступ к полям Scala из кода Java:

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: Неразрешенная проблема компиляции: Поле TestScala.myNum не отображается

Этот билет на Ассембле затрагивает эту тему, но мой маленький череп не может разобрать полезное решение:

http://scala -ide.assembla.com / пространства / Scala-ида / билеты / 1238-объекты-не-видимых к Java-в-смешанных Java-Scala-затмение-проект

Спасибо

1 Ответ

9 голосов
/ 07 ноября 2010

Доступ к полям 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(); работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...