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
,它只是一个类(尽管声明了一些枚举)。你不能打开一个类,而且,在你展示的代码片段中,对象甚至没有任何枚举类型的字段。。。