在 Java 中使用内部类 - 枚举

2022-09-03 10:08:54

我有一个非常具体的问题,与内部类有关。让我向您展示一些示例代码:

class Foo {
    MYOPTIONS temp;

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

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

public void setTempOption1 () {this.temp=MYOPTIONS.OPTION1;}
public void setTempOption2 () {this.temp=MYOPTIONS.OPTION2;}
public void setTempOption3 () {this.temp=MYOPTIONS.OPTION3;}

显然,另一种选择是更改枚举,而不是将其作为内部类。我错过了其他选择吗?谢谢


答案 1
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;
    }       
}

MYOPTIONS 的全名包含嵌入类名。


答案 2

声明是有效的,但您必须以这种方式使用它:

Foo.MYOPTIONS var = Foo.MYOPTIONS.OPTION1

使用“枚举”时缺少类的名称。