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

Java 6注释处理-从注释获取类

穆彬郁
2023-03-14
问题内容

我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档:

package com.example.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface Pojo {
    Class<?> value();
}

我这样使用它:

@Pojo(com.example.restserver.model.appointment.Appointment.class)

注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。

我需要value在注释处理器中读取该字段的值,但出现运行时错误。

在我的处理器的源代码中,我有以下几行:

final Pojo pojo = element.getAnnotation(Pojo.class);
// ...
final Class<?> pojoJavaClass = pojo.value();

但实际的类不适用于处理器。我认为我需要一个javax.lang.model.type.TypeMirror替代品来代替实际课程。我不确定该怎么买。

我得到的错误是:

javax.lang.model.type.MirroredTypeException: Attempt to access Class object for TypeMirror com.example.restserver.model.appointment.Appointment

Appointment是我的一个提到的一类@Pojo注释。

不幸的是,关于Java注释处理的文档和/或教程似乎很匮乏。尝试使用谷歌搜索。


问题答案:

您是否阅读过这篇文章:http :
//blog.retep.org/2009/02/13/getting-class-values-from-annotations-in-an-
annotationprocessor/

诀窍是实际使用getAnnotation()并捕获MirroredTypeException。令人惊讶的是,该异常随后提供了所需类的TypeMirror。

我不知道这是否是一个好的解决方案,但这是一个解决方案。以我个人的观点,我会尝试将类型添加到MirroredType后面,但是我不知道这是否可行。



 类似资料:
  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 问题内容: 在阅读 Java 中的自定义注释处理器的代码时,我注意到处理器方法中的这段代码: 碰巧我也在使用自定义注释处理器,所以我想在我的注释处理器中使用上面的代码段。 我以这种方式尝试了上面的代码: & 这条路: 但我没有注意到处理器行为的任何变化。我得到了支票,但看不到有什么用。 我想知道在处理特定回合时有用的用例。 问题答案: 这两项检查都很重要,但是直到在同一项目中一次运行多个注释处理器

  • 主要内容:使用Rem语句注释,注释使用::声明为创建的脚本添加注释或文档总是一个好习惯。 这是一个维护脚本用来理解脚本实际所做的事情所必需的注释。 例如,考虑下面这段没有注释形式的代码。 如果一个没有任何注释的脚本,普通人试图理解脚本,那么需要很多时间来理解脚本做些什么工作。 使用Rem语句注释 有两种方法可以在批处理脚本中创建注释; 一个是通过命令。 语句后的任何文本都将被视为注释,不会被执行。 以下是此声明的一般语法。 语法 其中是需要添

  • 在阅读Java中的自定义注释处理器的代码时,我注意到处理器的方法中的这段代码: 碰巧我也在处理一个自定义注释处理器&我想在我的注释处理器中使用上面的代码片段。 但是我没有注意到处理器的行为有任何变化。我得到了检查,但我看不出有什么用。 我想知道在处理某个回合时使用有用的用例。

  • 本文向大家介绍Oracle 获取表注释和列注释,包括了Oracle 获取表注释和列注释的使用技巧和注意事项,需要的朋友参考一下 全部表 表的注释 列的注释 相应的还有dba_col_comments,all_col_comments,这两个比user_col_comments多了ower列 以上所述是小编给大家介绍的Oracle 获取表注释和列注释,希望对大家有所帮助,如果大家有任何疑问请给我留言

  • 问题内容: 我正在编写我的第一个注释处理器,但遇到一些琐碎的问题,但找不到任何有关它的信息。 我有一个带有注释的元素 当我将此属性作为处理器中的元素获取时,我似乎无法以任何方式获取元素的类型。在这种情况下,可能要获取代表String的Class或TypeElement实例。 我尝试使用实例化容器类型的类对象,但它引发了ClassNotFoundException。我认为这是因为我无法访问包含该类的