当前位置: 首页 > 面试题库 >

如何在Java中获取类注释?

拓拔弘化
2023-03-14
问题内容

我创建了自己的注释类型,如下所示:

public @interface NewAnnotationType {}

并将其附加到一个类上:

@NewAnnotationType
public class NewClass {
    public void DoSomething() {}
}

我试图通过反射来获得类注释,如下所示:

Class newClass = NewClass.class;

for (Annotation annotation : newClass.getDeclaredAnnotations()) {
    System.out.println(annotation.toString());
}

但它没有打印任何内容。我究竟做错了什么?


问题答案:

默认的保留策略是RetentionPolicy.CLASS,默认情况下,注释信息在运行时不保留:

批注由编译器记录在类文件中,但VM在运行时无需保留。这是默认行为。

而是使用RetentionPolicy.RUNTIME

注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以通过反射方式读取它们。

…您使用@Retentionmeta注释指定:

@Retention(RetentionPolicy.RUNTIME)
public @interface NewAnnotationType {
}


 类似资料:
  • 考虑下面的代码: 使用用于注释处理的最新JDK8 API,如何访问注释列表(@JSON,@freezed) 我尝试过很多技巧,比如

  • 问题内容: 我试图在另一个问题中从Spark库调用。并且,它要求两个参数,一个文字对象,它的类型(A )。 第一个论点,我可以提出自己(我认为)。但是对于第二个对象,我不知道如何为它实例化一个对象。我正在尝试通过作为第二个参数。 有人可以告诉我如何在 Java中* 创建for 吗?这是我要完成的代码: * 问题答案: 在另一个问题中,我说 并从Java提供CanBuildFrom自变量在技术上是可

  • 我运行自己编写的注释处理器,根据注释类生成一些新的java代码。下面是我试图获取当前处理的类的超级类名的内容。 typeElement返回注释处理器正在处理的当前类。我想知道这个扩展了哪些类,哪些类是由这个类实现的。我使用的方法一点帮助都没有。 感恩节

  • 问题内容: 如果我有这样的方法: 如何同时获取@LinkLength和@LinkRange批注? 问题答案: 我假设您想反射地访问这些注释。这是一个例子: 输出以下内容: 以下是使用的方法: 只会得到一个公共方法。要获取非公开方法,请参见。 从延伸。 ,和和(和其他类型)全部继承。 上面的示例充分利用了有关该方法的知识。换句话说,我知道有一个参数,知道会返回,而且我知道参数化类型有一个类型实参。反

  • 我有一门课,比如下面的测试 有一个C1班 我给这门课打电话如下 当我调试时,我将i1设置为null。 请告知我做错了什么 注意:。我必须在xyx()中使用类Test,因为它是伪代码,并且xyx()中有很多代码

  • 作为我的一个要求,我创建了一个包含多个方法的inteface,每个方法都用我自己的java自定义注释进行了注释。我的实现类有一个spring aop方面,但我无法获得aop方面的自定义注释。在进行调试后,我明白了我的自定义注释是接口的一部分,而不是在实现类中。