作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含多个枚举的类,如下所示:
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
中,我如何获取它?
最佳答案
每个枚举都有自己的类型(在您的示例中,它们在这方面的行为类似于静态内部类)。
要拥有一个允许两个枚举的方法参数,您必须构建类型层次结构或将 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: ...
}
}
}
或
class A {
void GetValue(MyEnumerateClass.Enum1 value){}
void GetValue(MyEnumerateClass.Enum2 value){}
}
关于java - 获取特定枚举的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992279/
我是一名优秀的程序员,十分优秀!