To obtains all annotations for classes, methods, constructors, or fields we use the getAnnotations()
method. This method returns an array of Annotation
In the following example we tried to read all annotations from the sayHi()
method. First we need to obtain the method object itself. Because the sayHi()
method has parameters, we need to pass not only the method name to the getMethod()
method, but we also need to pass the parameter’s type.
The getAnnotations()
method returns only annotation that has a RetentionPolicy.RUNTIME
, because other retention policy doesn’t allow the annotation to available at runtime.
package org.kodejava.lang.annotation;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class GetAllAnnotation {
private final Map<String, String> data = new HashMap<>();
public static void main(String[] args) {
GetAllAnnotation demo = new GetAllAnnotation();
demo.sayHi("001", "Alice");
demo.sayHi("004", "Malory");
try {
Class<? extends GetAllAnnotation> clazz = demo.getClass();
// To get the sayHi() method we need to pass not only the method
// name but also its parameters type so the getMethod() method
// return the correct method for us to use.
Method method = clazz.getMethod("sayHi", String.class, String.class);
// Get all annotations from the sayHi() method. But this actually
// will only return one annotation. Because only the HelloAnnotation
// annotation that has RUNTIME retention policy, which means that
// the other annotations associated with sayHi() method is not
// available at runtime.
Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println("Type: " + annotation.annotationType());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
@MyAnnotation("Hi")
@HelloAnnotation(value = "Hello", greetTo = "Everyone")
public void sayHi(String dataId, String name) {
Map<String, String> data = getData();
if (data.containsKey(dataId)) {
System.out.println("Hello " + data.get(dataId));
} else {
data.put(dataId, name);
}
}
private Map<String, String> getData() {
data.put("001", "Alice");
data.put("002", "Bob");
data.put("003", "Carol");
return data;
}
}
package org.kodejava.lang.annotation;
public @interface MyAnnotation {
String value();
}
Check the HelloAnnotation
on the following link How do I create a simple annotation?.
The result of this code snippet:
Hello Alice
Type: interface org.kodejava.lang.annotation.HelloAnnotation
- How do I use the LongToDoubleFunction functional interface in Java? - March 15, 2025
- How do I use the LongSupplier functional interface in Java? - March 14, 2025
- How do I use the LongPredicate functional interface in Java? - March 14, 2025
Good, but there is a simpler way to find all annotated class: take a look to this example
https://www.burningwave.org/finding-all-annotated-classes/