gpt4 book ai didi

java - java 通用枚举迭代器

转载 作者:行者123 更新时间:2023-12-01 07:19:09 26 4
gpt4 key购买 nike

我的枚举

public enum ExamStausEnum {

RESULTAWAITED("Result Awaiting"),
PASSED("Passed"),
FAILED("Failed");

private String value;

ExamStausEnum(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}
}

通用迭代器枚举

static <E extends Enum <E>> void foo(Class<E> elemType) {
for (E e : java.util.EnumSet.allOf(elemType)) {
System.out.println(e);
}
}

结果:

RESULTAWAITED
PASSED
FAILED

如何打印构造函数值?

Result Awaiting
Passed
Failed

最佳答案

不可避免地要添加另一个参数来抽象 getValue() 调用:

static <E extends Enum <E>> void foo(Class<E> elemType, Function<? super E, ?> f) {
for(E e : java.util.EnumSet.allOf(elemType)) {
System.out.println(f.apply(e));
}
}

然后,您可以调用任意 enum 类型,不一定具有该方法,例如

foo(Thread.State.class, Object::toString);

或者对于具有该方法的特定枚举:

foo(ExamStausEnum.class, ExamStausEnum::getValue);

甚至还有更多用例:

foo(Thread.State.class, Enum::name);

foo(ExamStausEnum.class, Enum::ordinal);
<小时/>

当然,您也可以让您的 ExamStausEnum 类型覆盖 toString() 方法,从而无需 foo 调用 getValue()方法。

关于java - java 通用枚举迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687093/

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