从内部嵌套枚举访问外部类

2022-09-01 19:06:27

有没有办法进入外部?

public class OuterClass  {
    String data;

    public void outerMethod(String data) {
         this.data = data;
    }

    public enum InnerEnum {
        OPTION1("someData"),
        OPTION2("otherData");

        InnerEnum(String data) {
              // Does not work:             
              OuterClass.this.outerMethod(data);
        }
    }
}

答案 1

正如 Eric 所说,枚举是隐式静态的。若要执行所需的操作,请添加一个调用以执行所需操作的方法:callOuterMethod(OuterClass oc)oc.outerMethod(data)

public enum InnerEnum {
    OPTION1("someData"),
    OPTION2("otherData");

    final String data;

    InnerEnum(String data) {
       this.data = data;             
    }

    void callOuterMethod(OuterClass oc) {
        oc.outerMethod(data);
    }
}

答案 2

做不到。枚举是隐式静态的,即使您没有声明它是静态的。请参阅类似的问题/答案:

“嵌套枚举类型是隐式静态的。允许显式声明嵌套枚举类型为静态。

在Java中,类中的枚举类型是静态的吗?