当前位置: 首页 > 知识库问答 >
问题:

如何在javax中模拟getDeclaredAnnotation。朗,模特。元素类型元素

邢凯歌
2023-03-14

我在写一个注释处理器,我有一个带有@Inherited的注释“a”。这意味着对于任何表示类“c”的元素“e”,它扩展了我的注释实际存在的类,我将得到e.getAnnotation(a.class)!=空为真——好吧,这是期望值。

我还能够通过以下方式确定我的注释实际存在的层次结构中的最高级别:

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反射和名义getDeclaredAnnotions方法类的)。

//编辑:我今天不再思考了,所以这一点可能是显而易见的,但如果能够检测到注释是否已经在等级体系中声明了不止一次,这甚至会很有帮助,因为我甚至还不确定我是否想允许它。

共有1个答案

谭梓
2023-03-14

你试过了吗https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedElement.html#getDeclaredAnnotationsByType-爪哇。朗.班-

getAnnotationsByType(…)也使用它

 类似资料:
  • 我还尝试将模拟转换为文档,如下所示 但这会在代码实现内部访问MongoCollection时产生NullpointerException异常。 这两个我都试过了 null 我厌倦了用java编写相同的测试,并在其中进行泛型的转换。 有人在Kotlin有嘲弄泛型类的经验吗?

  • 问题内容: 我在DIV中有一个下拉菜单。 我希望用户单击其他任何位置时下拉菜单都隐藏。 不管用。 我知道.blur仅适用于这种情况,但是在这种情况下,最简单的解决方案是什么? 问题答案: 我认为问题在于div不会触发该事件。您需要捕获主体上的单击事件,然后确定目标是否为菜单div。如果不是,则用户单击了其他位置,并且需要隐藏div。

  • 问题内容: 软件包“ gopkg.in/redis.v3”包含一些代码 哪个以以下方式成功工作 问题在于,有时Redis集群会受到重击,有片刻,结果返回的接口为nil。 这是相当容易处理的,但是我希望进行测试以确保它被实际处理并且不会发生类型断言恐慌。 传统上,我会将模拟Redis客户端插入myFunc中,该客户端最终会返回nil。 我面临的问题是编译器无法识别redis.Client满足接口re

  • 所以我有三个类:A、B、C。我需要为类编写单元测试。 因此,C是一种重要的资源(如JDBC或ssh会话)。当然,我在嘲笑C。如何模拟B。想象一下,B有许多扩展它的子类。 我的主要问题是A正在调用super。(...) 。我不想仅仅为了测试而将方法注入到A中。对我来说,这是个糟糕的设计。有没有办法嘲笑父母? 例如,我不能执行类MockB扩展B{…} 然后尝试

  • 内建的 <template> 元素用来存储 HTML 模板。浏览器将忽略它的内容,仅检查语法的有效性,但是我们可以在 JavaScript 中访问和使用它来创建其他元素。 从理论上讲,我们可以在 HTML 中的任何位置创建不可见元素来储存 HTML 模板。那 <template> 元素有什么优势? 首先,其内容可以是任何有效的HTML,即使它通常需要特定的封闭标签。 例如,我们可以在其中放置一行表

  • in HTML and XML documents, when you expand abbreviations, all abbreviation parts are transformed on-the-fly into HTML/XML tags. But certain elements like a or img are transformed into elements with pr