Saturday, April 26, 2014
Today in this tutorial I am going to discuss with the annotations that are already defined in the Java language. Some of them are used by the Java compiler and some are used by other annotations.

Annotations used by compiler and declared in java.lang package
  • @Deprecated : This annotation is used to indicate that the element marked with it should not be used any longer. The compiler will generate warning if any program uses class, field or method marked with this annotation. It should also be documented with Javadoc annotation @deprecated. Many people make mistakes between the use of @ sign in annotation and javadoc comment. They are completely different and most importantly the annotation has upper-case while the Javadoc comment has a lower-case.
  • class DeprecationDemo{
       * @deprecated
       * defines how to use deprecated annotation
       public void deprecatedMethod(){}
  • @Override : This annotation is used to indicate that an element marked with it is meant to override an element of super-class. This is not necessary to override an element but helps to prevent runtime errors if Java fails to override during run-time. To know more why should you use this read our article here
  • @SupressWarnings : This annotation is used to supress some warnings that would be generated by the compiler if not used. In our example we will inherit a serializable class JPanel and not write the variable serialVersionUID which will generally result in warnings. But using this annotation will supress it.
  • @SupressWarnings("serial")
    class SupressWarningsDemo extends javax.swing.JPanel{
    It can also be used to supress other warnings like deprecated using "deprecation" if using any deprecated elements. Also unchecked warnings using "unchecked" while interfacing with legacy codes before the inclusion of generics.
  • @SafeVarargs : This annotation when applied to a method confirms that there will be no unsafe operation with the variable argument parameter. When it is used unchecked warnings associated with varargs are supressed.
  • @FunctionalInterface : This  annotation is used to indicate that an interface is functional interface. this one is related to lambda expression and method references. This annotation is included in Java 8. It can only used with interfaces and if used with classes or enums it will create an error.
There are certain other annotations called meta-annotations that apply to other annotations. They are declared in java.lang.annotation package
  • @Retention : It is used to denote how the annotation should be stored. There are 3 ways
    • RetentionPolicy.SOURCE : Retained at source level and ignored by compiler
    • RetentionPolicy.CLASS : Retained by compiler at compile-time but ignored by JVM
    • RetentionPolicy.RUNTIME : Used by JVM during run-time.
  • @Documented : This annotation is used to indicate that whenever the particular annotation is used it should be documented using Javadoc tool. By default they are not documented
  • @Target : It is used to indicate which kind of Java elements it can be applied.
    • ElementType.ANNOTATION : Can be applied to annotation type
    • ElementType.CONSTRUCTOR : Can be applied to constructors
    • ElementType.FIELD : Can be applied to a field
    • ElementType.LOCAL_VARIABLE : Can be applied to a local variable
    • ElementType.METHOD : Can be applied to a method
    • ElementType.PACKAGE : Can be applied to a package declaration
    • ElementType.PARAMETER : Can be applied to a parameter of a method
    • ElementType.TYPE : Can be applied to any element of a class.
  • @Inherited : It indicates that the annotation type can be inherited from the super-class. When the user queries the annotation type and the class has no annotation for this type, the class' superclass is queried for the annotation type. This annotation applies only to class declarations.
  • @Repeatable : This annotation has been included in Java 8. It indicates that the annotation marked with this can be apllied more than once to the same declaration.


Post a Comment

Total Pageviews

Subscribe via Email


Popular Posts