gpt4 book ai didi

java - 如何在 javax.lang.model.element TypeElement 中模拟 getDeclaredAnnotation

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:31 26 4
gpt4 key购买 nike

我正在编写一个注释处理器,并且我有一个带有 @Inherited 的注释“a”。这意味着,对于代表类“c”的任何元素“e”,该类“c”扩展了我的注释实际存在的类,我将得到 e.getAnnotation(a.class) != null 为真 - 嗯,这是期望。

我还能够确定我的注释实际存在的层次结构中的最高类:

private TypeElement getClassWhereAnnotationIsActuallyDefined(TypeElement e){
if(e.getAnnotation(a.class) == null){
throw new IllegalArgumentException("method called on type: "+e.getQualifiedName().toString()+" which is not annotated @a !");
}
TypeElement superE = (TypeElement) processingEnv.getTypeUtils().asElement(e.getSuperclass());
if(superE.getAnnotation(Secured.class) == null){
return e;
}else{
return getClassWhereAnnotationIsActuallyDefined(superE);
}
}

但是我无法获得识别给定元素上是否实际声明了注释的功能,该功能可以与层次结构中存在注释的多个类一起使用(这显然可以通过 java 反射和类的名义 getDeclaredAnnotations 方法实现)。

//编辑:我今天不再思考了,所以也许这个是显而易见的,但是能够检测注释是否在层次结构中声明了一次以上甚至会很有帮助,因为我什至不确定是否要允许它。

最佳答案

关于java - 如何在 javax.lang.model.element TypeElement 中模拟 getDeclaredAnnotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333658/

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