在Eclipse中从Java访问Scala实例变量 [英] Accessing Scala instance variables from Java in Eclipse

查看:148
本文介绍了在Eclipse中从Java访问Scala实例变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怀疑我必须遗漏一些非常基本的东西,但我似乎无法从Java代码访问Scala字段:

 包装测试; 

class TestScala(myNumber:Int){
val myNum:Int = myNumber;
}


包测试;

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);
}
}

收益率:



线程中的异常mainjava.lang.Error:未解决的编译问题:
字段TestScala.myNum不可见



Assembla票涉及到这个问题,但是我的小颅骨无法解析一个有用的解决方案:



http://scala-ide.assembla.com/spaces/ scala-ide / ticket / 1238-objects-not-visible-to-java-in-mixed-java-scala-eclipse-project



谢谢

解决方案

Val域通过名称相同的方法访问。



-Xprint:typer将显示:

  class TestScala使用ScalaObject扩展java.lang.Object {
< 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> <存取> def myNum:Int = TestScala.this.myNum
}

所以在Java int x = t.myNum(); 工作。


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-java-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.

这篇关于在Eclipse中从Java访问Scala实例变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆