如何从变量中获取枚举类?

时间:2014-03-26 12:44:17

标签: java

最佳代码解释。

我有类似的东西

public enum MyEnum implements MyEnumInterface { 
   A,
   B,
   C
}

public enum MyOtherEnum implements MyEnumInterface { 
   AA,
   BB,
   CC
}

和其他地方

public void doSomething(MyEnumInterface anEnum, ... ) {
   ... 
   // doSomething 
   ... 
}

我想知道anEnum来自哪个类(例如MyEnum或MyOtherEnum)。

我该怎么做? (没有对所有可能的实现进行检查的实例:))

4 个答案:

答案 0 :(得分:2)

您需要在枚举值上调用.getDeclaringClass()才能获得该类。但我认为你正在寻找Visitor Pattern

public class Example implements Visitor {

    public static void main(String[] args) {
        Example example = new Example();
        example.doSomething(MyEnum.A);
        example.doSomething(MyOtherEnum.BB);
    }

    public void doSomething(MyEnumInterface anEnum) {
        anEnum.visit(this);
    }

    @Override public void visit(MyEnum my) {
        System.out.println("MyEnum: " + my);
    }

    @Override public void visit(MyOtherEnum my) {
        System.out.println("MyOtherEnum: " + my);
    }
}

interface Visitor {

    public void visit(MyEnum my);

    public void visit(MyOtherEnum my);
}

interface MyEnumInterface {
    public void visit(Visitor visitor);
}

enum MyEnum implements MyEnumInterface { 
    A,
    B,
    C;

    @Override public void visit(Visitor visitor) {
        visitor.visit(this);
    }
 }

 enum MyOtherEnum implements MyEnumInterface { 
    AA,
    BB,
    CC;

    @Override public void visit(Visitor visitor) {
        visitor.visit(this);
    }
}    

这是您的评论的答案:

public static void main(String[] args) {
    System.out.println(MyEnum.A.getDeclaringClass());
}

输出:

class MyEnum

答案 1 :(得分:1)

您可以通过访问其类对象来执行此操作:

System.out.println(anEnum.getDeclaringClass().getName());

请注意,当getDeclaringClass()每个值都有自定义类主体时,More informationgetClass()严重不同。 {{3}}

答案 2 :(得分:1)

枚举也是类,所以使用

if(anEnum instanceof MyEnum) {...}

if(anEnum instanceof MyOtherEnum) {...}

答案 3 :(得分:0)

您可以使用instanceof运算符来确定对象的类型