我想通过java反映获得一个类的(打包在jar文件中)注释参数。
>
我这样的注释
@Documented
@Retention(RUNTIME)
@Target(TYPE)
public @interface TestPlugin {
public String moduleName();
public String plugVersion();
public String minLeapVersion();
}
我的班级是这样的
@TestPlugin(moduleName="xxx", plugVersion="1.0.0", minLeapVersion="1.3.0")
public class Plugin {
......
}
我的密码是这样的
Class<?> clazz = this.loadClass(mainClassName); // myself classloader
Annotation[] annos = clazz.getAnnotations();
for (Annotation anno : annos) {
Class<? extends Annotation> annoClass = anno.annotationType();
/* Question is here
This code can get right annotationType: @TestPlugin.
Debug windows show anno is $Proxy33.
But I can't find any method to get annotation membervalues even though I can find them in debug windows.
How can I get annotation's parameters?
*/
}
调试windows信息
出于某些技术原因,Java VM使用的“真实”注释类是动态代理。这不应该打扰你。它们仍然“实现”您的注释类。使用
TestPlugin plugin = clazz.getAnnotation(TestPlugin.class);
plugin.getClass() == TestPlugin.class; // false - is Dynamic proxy
TestPlugin.class.isAssignableFrom(plugin.getClass()); // true - Dynamic proxy implements TestPlugin interface
编辑:刚刚在另一个答案中发现,您也可以询问循环中的anno
对象,但不要使用getClass()
。使用。annotationType()
。
我有一门课,比如下面的测试 有一个C1班 我给这门课打电话如下 当我调试时,我将i1设置为null。 请告知我做错了什么 注意:。我必须在xyx()中使用类Test,因为它是伪代码,并且xyx()中有很多代码
问题内容: 我创建了自己的注释类型,如下所示: 并将其附加到一个类上: 我试图通过反射来获得类注释,如下所示: 但它没有打印任何内容。我究竟做错了什么? 问题答案: 默认的保留策略是,默认情况下,注释信息在运行时不保留: 批注由编译器记录在类文件中,但VM在运行时无需保留。这是默认行为。 而是使用: 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以通过反射方式读取它们。 …您使用met
问题内容: 如何从Java源文件中提取JavaDoc注释?以及按照我的意愿格式化它们? 问题答案: 有关标准方法,请参见Javadoc工具主页的 Doclets 部分。 Doclet 标准doclet生成HTML,并内置在Javadoc工具中。这里列出了Java软件开发的其他doclet。.. 尤其参见示例- 子类化标准Doclet 和Doclet API 。
我有一个kotlin类,它的属性有一个Java的注释,但是我不能用Java反射访问这些注释: 以下测试打印为空: 如何获取给定kotlin属性的注释?
问题内容: 我想读取一个文件,该文件位于类路径中所包含的 之一内。我如何读取其中包含的任何文件? 问题答案: 如果要从应用程序内部读取该文件,请使用: 路径以“ /”开头,但这不是文件系统中的路径,而是类路径中的路径。因此,如果你的文件位于类路径“ org.xml”中,并且名为myxml.xml,则路径类似于“ /org/xml/myxml.xml”。 InputStream读取文件的内容。如果需
考虑下面的代码: 使用用于注释处理的最新JDK8 API,如何访问注释列表(@JSON,@freezed) 我尝试过很多技巧,比如