gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:34:29 25 4
gpt4 key购买 nike

最好用代码来解释。

我有这样的东西

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)。

我怎样才能做到这一点? (无需对所有可能的实现进行instanceof检查:))

最佳答案

您需要对枚举值调用.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

关于java - 如何从变量中获取枚举类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com