最佳代码解释。
我有类似的东西
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)。
我该怎么做? (没有对所有可能的实现进行检查的实例:))
答案 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 information与getClass()
严重不同。 {{3}}
答案 2 :(得分:1)
枚举也是类,所以使用
if(anEnum instanceof MyEnum) {...}
和
if(anEnum instanceof MyOtherEnum) {...}
答案 3 :(得分:0)
您可以使用instanceof运算符来确定对象的类型