gpt4 book ai didi

java - 注释处理器 : get all enum values from a TypeMirror or TypeElement

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:07 24 4
gpt4 key购买 nike

我不明白如何在注释处理器中检索枚举值。

我的注释是自定义 Java Bean Validation 注释:

  @StringEnumeration(enumClass = UserCivility.class)
private String civility;

在我的注释处理器上,我可以访问这些实例:

javax.lang.model.element.AnnotationValue
javax.lang.model.type.TypeMirror
javax.lang.model.element.TypeElement

我知道它包含关于我的枚举的数据,因为我可以在 Debug模式下看到它。我还看到 ElementKind == Enum

但我想获取该枚举的所有名称,有人可以帮我吗。


编辑:我无权访问此 Enum 的 Class 对象,因为我们在注释处理器中,而不是在标准 Java 反射代码中。所以我不能调用 Class#getEnumConstants()EnumSet.allOf(MyEnum.class) 除非你告诉我如何从上述类型中获取 Class 对象.

最佳答案

我找到了一个解决方案(使用 Guava):

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();
}

关于java - 注释处理器 : get all enum values from a TypeMirror or TypeElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16424066/

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