找不到符号MODULE $

时间:2016-10-02 12:21:22

标签: java scala

我正在尝试访问嵌套在Scala中的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$

为什么?

1 个答案:

答案 0 :(得分:4)

不起作用的原因是因为类中的对象实际上不是单例。 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);