我有一个包含几个枚举的类,如下所示:
public class MyEnumerateClass
{
public enum Enum1
{
enum1Value1,
enum1Value2
}
public enum Enum2
{
enum2Value1,
enum2Value2
}
}
我有一个方法可以接受任何这样的枚举:
public void GetValue(MyEnumerateClass enumerateField)
{
switch (enumerateField)
{
case enum1Value1:
... do stuff here ...
break;
.......... stuff ..........
}
}
我们可以理解,GetValue
允许我接受之前声明的两个值中的任何一个。但我有一个问题:
当我需要检查枚举类型并检查它是Enum1
还是Enum2
时,我不知道如何处理...
public void GetType(MyEnumerateClass enumerateField)
{
enumerateField.values(); // To do this I need to know the type of the enumerate
}
那么,如果它在MyEnumerateClass
内,我如何得到枚举类型?
答案 0 :(得分:2)
每个枚举都是它自己的类型(在你的例子中,它们在这方面表现得像静态内部类)。
要让一个方法参数允许两个枚举,您必须构建一个类型层次结构或将Object作为参数值。如您所知,您可以接收哪些可能的类型(MyEnumerateClass $ Enum1或MyEnumerateClass $ Enum2),您可以对参数类型使用instanceof check和branch,或者为两个枚举重载方法。
void GetValue(Object o){
if(o instanceof MyEnumerateClass.Enum1) {
switch((MyEnumerateClass.Enum1) o){
case enum1value1: ...
}
} else if (o instanceof MyEnumerateClass.Enum2) {
switch((MyEnumerateClass.Enum2) o){
case enum2value1: ...
}
}
}
或
class A {
void GetValue(MyEnumerateClass.Enum1 value){}
void GetValue(MyEnumerateClass.Enum2 value){}
}
答案 1 :(得分:1)
Enum
与Class,Interface
类似,因此根据我的理解,枚举的创建不能在课堂内。
public enum Enum1
{
enum1Value1,
enum1Value2
}
public enum Enum2
{
enum2Value1,
enum2Value2
}
然后,您可以创建一个对象并使用枚举值。您可以参考What's the use of "enum" in Java?了解更多详情。
答案 2 :(得分:1)
每个枚举都扩展Enum<?>
,因此您可以使用此类型将参数限制为枚举实例。然后在方法中使用instanceof
:
public void GetValue(Enum<?> enumerateField) {
if (enumerateField instanceof Enum1) {
switch (enumerateField) {
case enum1Value1:
// ... do stuff here ...
break;
// .......... stuff ..........
}
} else (enumerateField instanceof Enum2) {
// whatever
}
}