2016-10-02 5 views
0

私はScalaでネストされているスカラobjectにアクセスしようとしていますclass

class ObjectState { 

    object Mirror { 
    def inMirrorObjectState(state: ObjectState): Unit = { 
     ... 
    } 
} 

私はこの

import com.lapots.game.journey.osm.domain.ObjectState; 
public class StaticInterop { 

    public static void readObjectState(ObjectState objState) { 
     ObjectState.Mirror$.MODULE$.inMirrorObjectState(objState); 
    } 

} 

ようにそれをやっている。しかし、それはコンパイル時に失敗し

error: cannot find symbol 
    ObjectState.Mirror$.MODULE$.inMirrorObjectState(objState); 
        ^
symbol: variable MODULE$ 
location: class ObjectState.Mirror$ 

なぜですか?

答えて

3

なぜなら、クラス内のオブジェクトが実際にシングルトンではないからです。 ObjectStateの各インスタンスは独自のオブジェクトを取得します。

ObjectState a = new ObjectState(); 
//use the above instance to access the singleton inside it 
a.Mirror().inMirrorObjectState(state); 

あなたは本当のシングルトン内部クラスを使用する場合は、あなたが同様のオブジェクトに外部クラスを変更することができます:あなたがこれを行う必要があるだろうというシングルトンにアクセスするには

object ObjectState { 

    object Mirror { 
    def inMirrorObjectState(state: ObjectState): Unit = { 
     ... 
    } 
} 

し、それは次のように動作します:

ObjectState.Mirror$.MODULE$.inMirrorObjectState(state); 
+0

は '公共の静的な無効readObjectState(ObjectState objState){動作しませんobjState.Mirror()。inMirrorObjectState(objState); } ' – lapots

+0

woops。いいえ、私の悪い。それはIDEが 'Mirror'を解決できないだけです。それは実際に動作します。 – lapots

関連する問題