gpt4 book ai didi

java - 是否有更简洁的方法来检索未弃用的枚举值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:18 24 4
gpt4 key购买 nike

请参阅下面的代码。我有一个 enum,其中一些值被标记为已弃用。我需要 Collection 的所有未弃用的 enum 值。我设法使用反射完成了任务,但对我来说它看起来太冗长了。是否有更简洁的方法来定义 @Deprecated 标记的存在?

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class DeprecatedEnumValues {

public enum MyEnum {
AA,
BB,
@Deprecated CC,
DD,
@Deprecated EE,
}

public static void main(String[] args) {

List<MyEnum> myNonDeprecatedEnumValues = new ArrayList<MyEnum>();

for (Field field : MyEnum.class.getDeclaredFields()) {
if (field.isEnumConstant() && !field.isAnnotationPresent(Deprecated.class)) {
myNonDeprecatedEnumValues.add(MyEnum.valueOf(field.getName()));
}
}
System.out.println(myNonDeprecatedEnumValues);
}
}

最佳答案

这是一个使用流的更简洁的解决方案:

public enum MyEnum {
AA,
BB,
@Deprecated CC,
DD,
@Deprecated EE,

/**
* Retrieve enum values without the @Deprecated annotation
*/
public static List<MyEnum> nonDeprecatedValues() {
return Arrays.stream(MyEnum.values()).filter(value -> {
try {
Field field = MyEnum.class.getField(value.name());
return !field.isAnnotationPresent(Deprecated.class);
} catch (NoSuchFieldException | SecurityException e) {
return false;
}
}).collect(Collectors.toList());
}
}

关于java - 是否有更简洁的方法来检索未弃用的枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189568/

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