相关疑难解决方法(0)

如何使用 Java8 获取 VariableElement 的类型注释和属性值?

考虑以下代码:

public class SimpleTest {

    private Map<@JSON Integer,Map<@Frozen Integer,@Enumerated(value = Enumerated.Encoding.NAME, test = "123") String>> map;
}
Run Code Online (Sandbox Code Playgroud)

使用最新的 JDK8 API 用于注释处理,如何从 VariableElement访问注释列表(@JSON@Frozen@Enumerated)及其相应的属性(@Enumerated的值和测试)?

final VariableElement mapElm = els.stream().filter(x -> x.getSimpleName().contentEquals("map")).findFirst().get();
???
???
Run Code Online (Sandbox Code Playgroud)

我尝试了很多技巧,例如mapElm.getTypeArguments().get(0)@Json Integer我从未成功获得注释@JSON ...

编辑:通过访问 JDK 的内部类,我可以访问这些注释,但它对 impl 更改非常hacky 和敏感,我想知道是否有更好的方法

public static class SimpleEntityCodecFactoryTest {

    private Map<@JSON Integer,Map<@Frozen Integer,@Enumerated(value = Enumerated.Encoding.NAME, test = "123") String>> map;
}

final TypeElement typeElement = elementUtils.getTypeElement(SimpleEntityCodecFactoryTest.class.getCanonicalName());
final List<VariableElement> els = ElementFilter.fieldsIn(typeElement.getEnclosedElements()); …
Run Code Online (Sandbox Code Playgroud)

java annotation-processing

5
推荐指数
1
解决办法
1824
查看次数

标签 统计

annotation-processing ×1

java ×1