Getting Annotation values at run-time
suggest changeYou can fetch the current properties of the Annotation by using Reflection to fetch the Method or Field or Class which has an Annotation applied to it, and then fetching the desired properties.
@Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation { String key() default "foo"; String value() default "bar"; }
class AnnotationExample { // Put the Annotation on the method, but leave the defaults @MyAnnotation public void testDefaults() throws Exception { // Using reflection, get the public method "testDefaults", which is this method with no args Method method = AnnotationExample.class.getMethod("testDefaults", null); // Fetch the Annotation that is of type MyAnnotation from the Method MyAnnotation annotation = (MyAnnotation)method.getAnnotation(MyAnnotation.class); // Print out the settings of the Annotation print(annotation); } //Put the Annotation on the method, but override the settings @MyAnnotation(key="baz", value="buzz") public void testValues() throws Exception { // Using reflection, get the public method "testValues", which is this method with no args Method method = AnnotationExample.class.getMethod("testValues", null); // Fetch the Annotation that is of type MyAnnotation from the Method MyAnnotation annotation = (MyAnnotation)method.getAnnotation(MyAnnotation.class); // Print out the settings of the Annotation print(annotation); } public void print(MyAnnotation annotation) { // Fetch the MyAnnotation 'key' & 'value' properties, and print them out System.out.println(annotation.key() + " = " + annotation.value()); } public static void main(String[] args) { AnnotationExample example = new AnnotationExample(); try { example.testDefaults(); example.testValues(); } catch( Exception e ) { // Shouldn't throw any Exceptions System.err.println("Exception [" + e.getClass().getName() + "] - " + e.getMessage()); e.printStackTrace(System.err); } } }
The output will be
foo = bar baz = buzz
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents