我写了一个简单的注释和一个 AnnotationProcessor 来处理注释。
注释只有一个值:它应该是现有接口(带有包)的名称。
注解处理器应该检索注解的值,检索接口的 Class 对象,最后打印接口中声明的所有方法。
示例:这是我的注释
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface MyAnnotation{
public String interfaceName();
}
这是带注释的类:
@MyAnnotation(interfaceName = "java.lang.CharSequence")
public class Example{}
我的处理器看起来像
[...]
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
for (TypeElement te : annotations) {
for(Element e : env.getElementsAnnotatedWith(te)) {
MyAnnotation myAnnotation = e.getAnnotation(MyAnnotation.class);
String iName = myAnnotation.interfaceName();
Class<?> clazz = Class.forName(iName);
// use reflection to cycle through methods and prints them
[...]
}
}
现在,如果我将 java.lang.CharSequence 之类的接口配置为 MyAnnotation 的 interfaceName,则可以正常工作;
但是,如果我将位于 .jar 文件(添加到项目的构建路径中)中的接口配置为 interfaceName,则在我尝试执行 Class.forName(...) 语句时会获得 ClassNotFoundException。
有什么想法吗?
Cats萌萌
相关分类