gpt4 book ai didi

java - 在运行时动态从 Enum 获取值

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

我的枚举类型-

public enum Foo {A, B, C}

还有

public enum Bar {A("aaa"), B("bbb"), C("ccc")}

我在运行时拥有的只是枚举类名,即“Foo”

我这样做 -

Class<?> c = Class.forName(getClassName()) // local function 

使用Arrays.asList(c.getEnumConstants())让我明白 -

富 -

[A, B, C]

酒吧-

[aaa, bbb, ccc]

我也想要[A, B, C]评估时Bar .

.values()是我想要的,但是如何在没有任何显式转换的情况下动态地获得它?

非常感谢您的回复。

已找到解决方案 -

List<? extends Enum<?>> enums = (List<? extends Enum<?>>) Arrays.asList(c.getEnumConstants());
for (Enum<?> e: enums) {
System.err.println("e.name: " + e.name());
}

最佳答案

我怀疑您的Arrays.asList(c.getEnumConstants())实际上工作正常。当你打印数组时,你看到的是 BartoString() 结果列表,它变成 [aaa, bbb, ccc].

尝试如下:

for (Bar b : Bar.class.getEnumConstants()) {
System.out.println(b.name() + "(\"" + b.toString() + "\")");
}

你应该明白我的意思。

如果您有一个定义自己的 toString()enum,您可以尝试包装它:

static class EnumNamer<T extends Enum<T>> {
final T he;

public EnumNamer(T he) {
this.he = he;
}

@Override
public String toString() {
return he.name();
}
}

public void test() {
System.out.println("Hello");
for (Bar b : Bar.class.getEnumConstants()) {
System.out.println(b.name() + "(\"" + b.toString() + "\")");
EnumNamer<Bar> en = new EnumNamer<>(b);
System.out.println(en + "(\"" + en.toString() + "\")");
}
}

现在您已经澄清了几点 - 这对我有用:

// This cast should be OK so long as we KNOW its an enum.
Class<Enum> c = (Class<Enum>)Class.forName(Bar.class.getName());
for (Enum e : c.getEnumConstants()) {
EnumNamer en = new EnumNamer(e);
System.out.println(en + "(\"" + en.toString() + "\")");
}

关于java - 在运行时动态从 Enum 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251369/

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