我不明白如何在注释处理器中检索枚举值.
我的注释是一个自定义Java Bean验证注释:
@StringEnumeration(enumClass = UserCivility.class)
private String civility;
Run Code Online (Sandbox Code Playgroud)
在我的注释处理器上,我可以访问这些实例:
javax.lang.model.element.AnnotationValue
javax.lang.model.type.TypeMirror
javax.lang.model.element.TypeElement
Run Code Online (Sandbox Code Playgroud)
我知道它包含有关我的枚举的数据,因为我可以在调试模式下看到它.我也看到了ElementKind == Enum
但我想得到Enum的所有名字,请有人帮助我.
编辑:我无法访问此枚举的Class对象,因为我们在一个注释处理器中,而不是标准的Java反射代码.所以我不能打电话Class#getEnumConstants()或EnumSet.allOf(MyEnum.class)除非你告诉我如何从上面提到的类型中获取Class对象.
我找到了一个解决方案(这使用番石榴):
class ElementKindPredicate<T extends Element> implements Predicate<T> {
private final ElementKind kind;
public ElementKindPredicate(ElementKind kind) {
Preconditions.checkArgument(kind != null);
this.kind = kind;
}
@Override
public boolean apply(T input) {
return input.getKind().equals(kind);
}
}
private static final ElementKindPredicate ENUM_VALUE_PREDICATE = new ElementKindPredicate(ElementKind.ENUM_CONSTANT);
public static List<String> getEnumValues(TypeElement enumTypeElement) {
Preconditions.checkArgument(enumTypeElement.getKind() == ElementKind.ENUM);
return FluentIterable.from(enumTypeElement.getEnclosedElements())
.filter(ENUM_VALUE_PREDICATE)
.transform(Functions.toStringFunction())
.toList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |