在Java中使用内部类 - 枚举

sak*_*das 13 java enums inner-classes

我有一个非常具体的问题,与内部类有关.让我给你看一些示例代码:

class Foo {
    MYOPTIONS temp;

    public static enum MYOPTIONS {
        OPTION1, OPTION2, OPTION3;
    } 
}
Run Code Online (Sandbox Code Playgroud)

所以这个枚举在Foo类中.现在我要做的是将temp变量设置为三个选项之一,但是在类Foo之外执行,比如说来自一个名为External的类.不幸的是我无法使用set方法来执行此操作,因为External.setTemp (MYOPTIONS.OPTION1)无效,因为枚举在类外部不可见.所以我唯一能想到的就是在Foo类中有三个方法:

public void setTempOption1 () {this.temp=MYOPTIONS.OPTION1;}
public void setTempOption2 () {this.temp=MYOPTIONS.OPTION2;}
public void setTempOption3 () {this.temp=MYOPTIONS.OPTION3;}
Run Code Online (Sandbox Code Playgroud)

显然,另一种选择是更改枚举,而不是将其作为内部类.我还缺少其他选择吗?谢谢

use*_*own 24

class ContainsInnerEnum {
    MYOPTIONS temp;

    public enum MYOPTIONS {
        OPTION1, OPTION2, OPTION3;
    } 
}

class EnumTester {
    public void test () {
        ContainsInnerEnum ie = new ContainsInnerEnum ();
        // fail:
        // ie.temp = MYOPTIONS.OPTION1;
        // works:
        ie.temp = ContainsInnerEnum.MYOPTIONS.OPTION1;
    }       
}
Run Code Online (Sandbox Code Playgroud)

MYOPTIONS的全名包含嵌入类名.

  • IntelliJ说:对于内部枚举,修饰符静态是多余的.请参阅:http://stackoverflow.com/questions/253226/nested-java-enum-definition-does-declaring-as-static-make-a-difference (2认同)