我是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并且无法更改签名,该怎么办?
答案 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"));