我有一个包含Java内部类的枚举类。
例如(在实际代码中,在内部使用内部类的枚举上声明了一些方法):
public enum MyEnum{
VALUE_1,
VALUE_2;
private static class MyInnerClass // is static here needed or can it be removed?
{
}
}
PMD告诉我,静态'不需要修饰符(违反UnusedModifier规则)。这是正确的还是PMD错误?
注意:This question不是重复的,它与我在这里要求的相反。
答案 0 :(得分:8)
static
关键字不是多余的。您可以创建一个静态嵌套类(使用static
关键字)或内部类(不使用它)。在第一种情况下,不会将类分配给任何特定的枚举值。在第二种情况下,内部类的实例需要有一个封闭的实例 - enum
值之一:
public class Test {
public static void main(String[] args) {
MyEnum.VALUE_1.createInnerObject().showName();
MyEnum.VALUE_2.createInnerObject().showName();
}
public enum MyEnum {
VALUE_1, VALUE_2;
public MyInnerClass createInnerObject() {
return new MyInnerClass();
}
private class MyInnerClass {
public void showName() {
System.out.println("Inner class assigned to " + MyEnum.this + " instance");
}
}
}
}
在上面的示例中,您无法直接从MyInnerClass
创建MyEnum
的实例:
new MyEnum.MyInnerClass(); // this will fail
为了做到这一点,你需要一个static
嵌套类,但是你不能使用MyEnum.this
之类的东西。