Last active
May 6, 2018 15:27
-
-
Save twiceyuan/b8b4d952d6fd641e98f68f1e9d327988 to your computer and use it in GitHub Desktop.
[运行时修改注解值的方法] Annotation Value modify #Java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void main(String[] args) throws Exception { | |
final Something oldAnnotation = (Something) Foobar.class.getAnnotations()[0]; | |
System.out.println("oldAnnotation = " + oldAnnotation.someProperty()); | |
Annotation newAnnotation = new Something() { | |
@Override | |
public String someProperty() { | |
return "another value"; | |
} | |
@Override | |
public Class<? extends Annotation> annotationType() { | |
return oldAnnotation.annotationType(); | |
} | |
}; | |
Field field = Class.class.getDeclaredField("annotationData"); | |
field.setAccessible(true); | |
Object object = field.get(Foobar.class); | |
field = object.getClass().getDeclaredField("annotations"); | |
field.setAccessible(true); | |
Map<Class<? extends Annotation>, Annotation> annotations = (Map<Class<? extends Annotation>, Annotation>) field.get(object); | |
annotations.put(Something.class, newAnnotation); | |
Something modifiedAnnotation = (Something) Foobar.class.getAnnotations()[0]; | |
System.out.println("modifiedAnnotation = " + modifiedAnnotation.someProperty()); | |
} | |
@Something(someProperty = "some value") | |
public static class Foobar { | |
} | |
@Retention(RetentionPolicy.RUNTIME) | |
@interface Something { | |
String someProperty(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
你这是类上的,方法上的怎么解决,类似于以下
@something(value={})
public void metod(ChangeEvent event){
//do something
}