Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取特定枚举的类型_Java_Enums - Fatal编程技术网

Java 获取特定枚举的类型

Java 获取特定枚举的类型,java,enums,Java,Enums,我有一个包含几个枚举的类,如下所示: public class MyEnumerateClass { public enum Enum1 { enum1Value1, enum1Value2 } public enum Enum2 { enum2Value1, enum2Value2 } } public void GetValue(MyEnumerateClass enume

我有一个包含几个枚举的类,如下所示:

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 ..........
      }
  }
我有一个方法,可以采用以下任何枚举:

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
内部,我如何获取它?

Enum
类似于
类、接口
,因此根据我的理解,Enum的创建不能在类内部。
public enum Enum1
    {
        enum1Value1,
        enum1Value2
    }
    public enum Enum2
    {
        enum2Value1,
        enum2Value2
    }

然后可以创建一个对象并使用枚举值。您可以参考更多详细信息。

Enum
类似于
类、接口
,因此根据我的理解,Enum的创建不能在类中进行。
public enum Enum1
    {
        enum1Value1,
        enum1Value2
    }
    public enum Enum2
    {
        enum2Value1,
        enum2Value2
    }

然后可以创建一个对象并使用枚举值。您可以参考以了解更多详细信息。

每个枚举都有自己的类型(在您的示例中,它们在这方面的行为类似于静态内部类)

要使一个方法参数同时允许两个枚举,您必须构建类型层次结构或将Object作为参数值。正如您知道可以接收哪些可能的类型(MyEnumerateClass$Enum1或MyEnumerateClass$Enum2)一样,您可以对参数的类型使用instanceof检查和分支,或者为两个枚举重载方法

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: ...
        }
    }
}


每个枚举都有自己的类型(在您的示例中,它们在这方面的行为类似于静态内部类)

要使一个方法参数同时允许两个枚举,您必须构建类型层次结构或将Object作为参数值。正如您知道可以接收哪些可能的类型(MyEnumerateClass$Enum1或MyEnumerateClass$Enum2)一样,您可以对参数的类型使用instanceof检查和分支,或者为两个枚举重载方法

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: ...
        }
    }
}


每个枚举都扩展了
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
    }   
}
public void GetValue(枚举字段){
if(枚举1的枚举字段实例){
开关(枚举字段){
案例enum1Value1:
//…在这里做事。。。
打破
//东西。。。。。。。。。。
}
}else(枚举2的枚举字段实例){
//随便
}   
}

每个枚举都扩展了
枚举
,因此您可以将参数限制为使用此类型的枚举实例。然后在方法中使用
instanceof

public void GetValue(Enum<?> enumerateField) {
    if (enumerateField instanceof Enum1) {
        switch (enumerateField) {
            case enum1Value1:
              // ... do stuff here ...
            break;
             // .......... stuff ..........
        }
    } else (enumerateField instanceof Enum2) {
        // whatever
    }   
}
public void GetValue(枚举字段){
if(枚举1的枚举字段实例){
开关(枚举字段){
案例enum1Value1:
//…在这里做事。。。
打破
//东西。。。。。。。。。。
}
}else(枚举2的枚举字段实例){
//随便
}   
}

这个问题对我来说毫无意义。变量
enumerateField
的类型为
MyEnumerateClass
,它只是一个类(尽管声明了一些枚举)。你不能打开一个类,而且,在你展示的代码片段中,对象甚至没有任何枚举类型的字段……这个问题对我来说真的没有意义。变量
enumerateField
的类型为
MyEnumerateClass
,它只是一个类(尽管声明了一些枚举)。你不能打开一个类,而且,在你展示的代码片段中,对象甚至没有任何枚举类型的字段。。。