Java Annotations provide Java developers full potential of doing things in more easy and nice way. I will not go explaining Java annotations pros, cons, and the definitions; you can find out here http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html
instead I will add some piece which I hardly found: how can I write my own Annotation class and make use of them?! here you go:
I will take a simple Beans that Document who wrote some Java class and who reviewed it.
Requirements
- Author, Data Type: String
- Reviewers, Data Type: Array of String
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)
public @interface Documentation {
String author();
String [] reviewers() default {};
}
what have we done? we created a file called Documentation.java that is an interface, and because it’s an annotation it’s written like this @interface
we have add two methods signatures:
- author: returns a String.
- reviewers: returns an array of string, that is an optional element to mention, so we provided a default value of empty string array (I know you noticed that 😉
a question: what does@Retention(RetentionPolicy.RUNTIME) do? well, it indicates to the JVM that this annotation is intended to be used at runtime, simply.
now, it’s time to introduce the famous Hello World class 😀
import java.lang.annotation.Annotation;
@Documentation(author=”Alex”, reviewers={“Divid”, “Osama”})
public class HelloWorld {
public static void main(String [] args){
System.out.println(“checking documentation for class HelloWorld.java”);
Annotation annotation = HelloWorld.class.getAnnotation(Documentation.class);
if (annotation == null) {
System.out.println(“No Documentation was found for class HelloWorld, exit”);
System.exit(0);
}
Documentation doc = (Documentation) annotation;
System.out.println(“author: ” + doc.author());
for (String reviewer : doc.reviewers()) {
System.out.println(“reviewer: ” + reviewer);
}
System.exit(0);
}
}
what have we done? we created a Java Class called HelloWorld, that uses @Documentation annotation.
we have extracted the informtion provided for this class in @Documentation annotation element.