1

我是 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

4 回答 4

3

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

public void aMethod(int position) {

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

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
            }
        }
    }
}
于 2013-04-04T15:05:15.290 回答
2

您不能打开 anint然后尝试将其与enum.

如果您将方法签名更改为

public void aMethod(Enum position)

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

case value1:
于 2013-04-04T15:03:50.017 回答
2

从需要具有 int 参数的方法的抽象类覆盖

我会这样做:

public enum Enum { value1, value2 }
public class InnerClass  {
  public void aMethod(int position) {
    Enum value = Enum.values()[position];
    switch (value) {
      case value1:
于 2013-04-04T15:06:44.670 回答
0

您的 aMethod 不应使用 int 作为参数类型。在 JDK6 之前,也不能在 Switch 语句中使用字符串。在 Java SE 7 中实现了带有 String case 的 Switch 语句,至少在它们首次被请求之后 16 年。

你也不应该忘记每个 case 之后的 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"));
于 2013-04-04T15:38:03.653 回答