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 get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024
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/