Я хочу создать пользовательскую аннотацию и прочитать значения, используя Javasisst. Я пробовал это:
Аннотация:
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE })
public @interface FixDescription {
public String author() default "";
}
Тестовый класс:
@FixDescription(author="John Doe")
public class Hello {
@FixDescription(author="John Doe")
private int internal;
@FixDescription(author="John Doe")
public void say() {
System.out.println("Hello");
}
}
Попытка чтения:
// https://www.javassist.org/html/javassist/bytecode/AnnotationsAttribute.html
ClassFile classFile = ClassPool.getDefault().get("org.poc.Hello").getClassFile();
ConstPool constPool = classFile.getConstPool();
MethodInfo method = classFile.getMethod("say");
AnnotationsAttribute attr = (AnnotationsAttribute) method.getAttribute(AnnotationsAttribute.visibleTag);
Annotation an = attr.getAnnotation("FixDescription");
String s = ((StringMemberValue)an.getMemberValue("author")).getValue();
System.out.println("@FixDescription(author=" + s + ")");
Я получаю NPE на этой линии: an.getMemberValue("author")
Знаете ли вы, как эта проблема может быть исправлена? Я не могу найти решение.