2010-11-07 7 views
3

Je pense que je dois manquer quelque chose de très élémentaire, mais je ne peux pas sembler accéder aux champs Scala de code Java:Accès Scala variables d'instance de Java dans 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);  
    } 
} 

Rendement:

Exception en fil « principale » java.lang.Error: problème de compilation non résolues: le TestScala.myNum champ n'est pas visible

Ce billet Assembla touche sur le sujet, mais mon petit crâne ne peut pas analyser une solution utile:

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

Merci

Répondre

8

champs Val sont accessibles par des méthodes avec le même nom.

scalac -Xprint: typer vous montrer que:

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 
} 

donc en Java int x = t.myNum(); fonctionne.

+0

Merci Pedro! Le code est toujours marqué comme invalide dans l'éditeur mais compile quand même. À votre santé. – Ephemiere

+0

Vraiment? J'essaierais un projet | Clean. Pour être honnête, je n'ai jamais essayé de mixer des projets Java + Scala. Avoir deux projets a toujours fonctionné pour moi. – pedrofurla