Java 反思:Class 注释在运行时意外返回 null

Java Reflection: Class Annotations coming back null unexpectedly at runtime

我正在尝试在运行时向 class 动态添加注释,如以下问题所示:Modify a class definition's annotation string parameter at runtime

但是,'annotations' 字段返回为空。事实上,根据调试器,除了 "declaredFields" 和 "name" 之外,class 上的所有内容都将返回 null。我正在使用 Java 7.

这是我的代码:

Field field = Class.class.getDeclaredField("annotations");
field.setAccessible(true);
Map<Class<? extends Annotation>, Annotation> annotations = 
    (Map<Class<? extends Annotation>, Annotation>) 
        field.get(clazz);
annotations.put(JsonIdentityInfo.class, newAnnotation);

似乎 class 字段 annotations 是延迟构建的,您首先需要强制其初始化:

JsonIdentityInfo.class.getAnnotations();

然后继续你的代码。