【发布时间】:2012-04-28 10:09:09
【问题描述】:
我有一个与内部类有关的非常具体的问题。让我给你看一些示例代码:
class Foo {
MYOPTIONS temp;
public static enum MYOPTIONS {
OPTION1, OPTION2, OPTION3;
}
}
所以这个枚举在类 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;}
显然,另一种选择是更改枚举而不将其作为内部类。 我还有其他选择吗? 谢谢
【问题讨论】:
-
你不需要改变枚举,你只需要使内部类(Foo)不是内部的
-
作用域在相反的方向上不起作用。如果您在方法中声明一个变量,您不希望它在方法之外定义。这是同一个概念,只是以更抽象的方式。
-
如果你使用 Eclipse,有一些重构工具可以自动将枚举或类移动到它自己的文件中,并使其成为公共或包私有
-
Foo 不是内部类,MYOPTIONS 是,我不知道为什么我用大写字母写它:P 似乎除了我自己建议的 2 之外,我没有其他选择。
-
OPTION 2 空格太多,需要逗号,OPTION3 需要分号。显示测试代码并使用正确的缩进会很好。
标签: java enums inner-classes