在运行时动态更改类字段的注释

时间:2019-11-20 13:31:47

标签: java reflection annotations

假设我有一个类定义

@DynamoDBTable(tableName = "table_one")
public class ProcessedVideoItem {
        @DynamoDBHashKey(attributeName = "hash_key")
        private String id;
}

如何在运行时动态地将atributeName注释中的@DynamoDBHashKey更改为actual_hash_key

我找到了在运行时更改类注释的解决方案:

void setAnnotationN(Class< ? > clazzToLookFor, Class<? extends Annotation> annotationToAlter){
    Method method = Class.class.getDeclaredMethod("annotationData", null);
    method.setAccessible(true);            
    Object annotationData = method.invoke(clazzToLookFor);
    Field annotations = annotationData.getClass().getDeclaredField("annotations");
    annotations.setAccessible(true);
    Map<Class<? extends Annotation>, Annotation> map =
                 (Map<Class<? extends Annotation>, Annotation>)annotations.get(annotationData);
    map.put(annotationToAlter, annotationValue);
}

但是,这不适用于类的字段上的注释。 我尝试更改

Object annotationData = method.invoke(clazzToLookFor.getDeclaredField("id"));

但这不起作用。

0 个答案:

没有答案