Java枚举和嵌套类

时间:2013-04-04 15:01:02

标签: java enums inner-classes

我是Java的初学者(Objective-C是我最熟知的语言),我真的很难找到一个我想要实现的目标的简洁例子:

public class OuterClass extends ClassToExtend {

    public enum Enum { value1, value2 }

    public class InnerClass extends AnotherClassToExtend {

        public void aMethod(int position) {
            switch (position) {
                case Enum.value1:
                    //Do something
                case Enum.value2:
                    //Do Something else
            }
        }
    }
}

显然这不起作用(对枚举的引用)但是应该知道我想要做什么,需要改变什么来使这个工作? 我想我需要在某个地方声明枚举来引用它吗?

我将很感激对更正的解释,以便我能够学习并希望将来为自己解决类似的困难。

由于

编辑:如果该方法是@Override并且无法更改签名,该怎么办?

4 个答案:

答案 0 :(得分:3)

首先,您必须打开枚举本身,因此您需要更改以下行:

public void aMethod(int position) {

接受你的枚举而不是int。其次,枚举的值需要直接在switch中引用,因为enum已经在当前对象的范围内。

public class OuterClass extends ClassToExtend {

    public enum Enum { value1, value2 };

    public class InnerClass extends AnotherClassToExtend {

        public void aMethod(Enum position) {
            switch (position) {
                case value1:
                    //Do something
                case value2:
                    //Do Something else
            }
        }
    }
}

答案 1 :(得分:2)

您无法启用int,然后尝试将其与enum匹配。

如果您将方法签名更改为

public void aMethod(Enum position)

并使用裸枚举值(例如value1)然后它应该工作:

case value1:

答案 2 :(得分:2)

从需要带有int参数的方法的抽象类中重写

我会这样做:

public enum Enum { value1, value2 }
public class InnerClass  {
  public void aMethod(int position) {
    Enum value = Enum.values()[position];
    switch (value) {
      case value1:

答案 3 :(得分:0)

你的aMethod不应该使用int作为参数类型。 在JDK6之前,也无法在Switch语句中使用字符串。带有String案例的Switch语句已在Java SE 7中实现,至少在它们首次请求后16年内实现。

在每个案例之后你也不应该忘记break语句。否则,您的所有案例都将被阅读。

public void aMethod(Enum position) {
 switch (position) {
                case value1:
                    System.out.println("I am Value 1");
                    break;
                case value2:
                    System.out.println("I am Value 1");
                    break;
 }
} 

进行测试,使用

ob.aMethod(Enum.value1);

ob.aMethod(Enum.valueOf("value1"));