javaelement获取属性_如何使用Java8获取VariableElement的类型。。。

更新时间:2023-08-03 13:06:23 阅读: 评论:0

javaelement获取属性_如何使⽤Java8获取VariableElement的
类型。。。
道德与法律
请考虑以下代码:
跨年祝福语
public class SimpleTest {
private Map> map;
}
使⽤最新的JDK8 API进⾏注释处理,如何从VariableElement访问注释列表(@JSON,@ Frozen& @Enumerated)及其相应的属性
(@Enumerated的值和测试)?唐代四大类书
final VariableElement mapElm = els.stream().filter(x -> x.getSimpleName().contentEquals("map")).findFirst().get();
我尝试过很多技巧,⽐如TypeArguments().get(0)for @Json Integer但是我从来没有成功地抓
住注释@JSON ……
编辑:通过访问JDK的内部类,我可以访问这些注释,但它是如此hacky和敏感的impl变化,我想知道是否有更好的⽅法
public static class SimpleEntityCodecFactoryTest {
聊斋是什么意思
private Map> map;
}
final TypeElement typeElement = TypeElement(CanonicalName());
关于冷的成语
final List els = ElementFilter.EnclodElements());
final VariableElement mapElt = els.stream().filter(x -> x.getSimpleName().contentEquals("map")).findFirst().get();
final ls.javac.util.List typeAttributes = ((Symbol.VarSymbol) mapElt).getMetadata().getTypeAttributes();
for (Attribute.TypeCompound typeAttribute : typeAttributes) {
treat意思final DeclaredType annotationType = AnnotationType();
System.out.println(format("Accessing annotation '%s' at location :
%s",String(),Position().location));
for (Map.Entry entry : ElementValues().entrySet()) {
final Symbol.MethodSymbol methodSymbol = Key();
final Attribute attribute = Value();
橘色的英语System.out.println(format("Attribute '%s' for annotation '%s' : %s", methodSymbol.name, String(), String()));
}
}
输出显⽰:
Accessing annotation 'info.archinnov.achilles.annotations.JSON' at location : TYPE_ARGUMENT(0)
Accessing annotation 'info.archinnov.achilles.annotations.Frozen' at location : TYPE_ARGUMENT(1),TYPE_ARGUMENT(0)
Accessing annotation 'info.archinnov.achilles.annotations.Enumerated' at location :
TYPE_ARGUMENT(1),TYPE_ARGUMENT(1)
Attribute 'value' for annotation 'info.archinnov.achilles.annotations.Enumerated' :
info.archinnov.achilles.annotations.Enumerated.Encoding.NAME
轻盈的近义词Attribute 'test' for annotation 'info.archinnov.achilles.annotations.Enumerated' : "123"
上⾯的代码在IntelliJ中运⾏良好,但是由于脏转换((Symbol.VarSymbol)mapElt).getMetadata(),它正在使⽤Oracle JDK,但是在Eclip编译器中失败了.
现在,我找不到任何其他解决⽅案⽽不是脏转换来访问泛型类型中的注释.欢迎任何想法
解:
感谢Werner(wmdietl),我可以使⽤Tree API⽽不是Elements或TypeMirror来访问嵌套注释
但是我很困惑,因为⼀旦到达那⾥,就不可能将Tree的任何⼦类转换回Element或TypeMirror(我的真实⽬标).
我想在使⽤与ECJ编译器兼容的可⽤Element API之前,我将不得不等待JDK 9

本文发布于:2023-08-03 13:06:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106585.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注释   访问   知道   编译器   属性   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图