【发布时间】:2014-01-17 15:27:41
【问题描述】:
请参阅下面的代码。我有一个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);
}
}
【问题讨论】:
-
这对我来说并不是很冗长(对于 Java)。我没有在 Java 中大量使用反射,但我就是这样做的。
-
我会使用
&&而不是&但否则只使用较短的名称会使其更短。 -
@PeterLawrey,谢谢。星期五下午我的编码准确性有点草率;-) 我将编辑示例代码。
-
有一瞬间我以为你发明了 AND-NOT 运算符
&!
标签: java reflection enums deprecated