2010-11-07 27 views
3

訪問斯卡拉實例變量,我懷疑我必須失去了一些非常基本的,但我似乎無法從Java代碼中訪問Scala的字段:從Java在Eclipse

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

產量:

在線程異常「主要」 java.lang.Error的:未解決的問題編譯: 領域TestScala.myNum是不可見的

這Assembla票倒是問題,但我的小頭蓋骨無法解析一個有用的解決方案:

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

感謝

回答

8

瓦爾字段通過具有相同名稱的方法來訪問。

scalac -Xprint:打字員你會發現:

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();作品。

+0

謝謝佩德羅!該代碼仍然在編輯器中被標記爲無效,但仍然編譯。乾杯。 – Ephemiere 2010-11-07 19:33:10

+0

真的嗎?我會嘗試一個Project | Clean。說實話,我從來沒有嘗試過混合Java + Scala項目。有兩個項目總是爲我工作。 – pedrofurla 2010-11-07 20:51:19