Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use @inherited annotation in Java?

I am not getting the @Inherited annotation in Java. If it automatically inherits the methods for you then if I need to implement the method in my own way then what about that ?

How does will it come to know my way of implementation ?

Plus it is said if I do not want to use this and do it rather in an old fashioned Java way I have to implement the the equals(), toString(), and the hashCode() methods of the Object class and also the annotation type method of the java.lang.annotation.Annotation class.

Why is that?

I have never implemented those even when I did not know about the @Inherited annotation and the programs used to work fine also .

Please somebody explain me from the scratch about this.

like image 890
StrugglingCoder Avatar asked May 31 '14 17:05

StrugglingCoder


People also ask

What is @inherited annotation in Java?

@inherited is a type of meta-annotation used to annotate custom annotations so that the subclass can inherit those custom annotations.

What is the use of inherited annotation?

Annotation Type Inherited If an Inherited meta-annotation is present on an annotation type declaration, and the user queries the annotation type on a class declaration, and the class declaration has no annotation for this type, then the class's superclass will automatically be queried for the annotation type.

Do annotations get inherited Java?

Because there is no multiple inheritance in Java, annotations on interfaces cannot be inherited. Even when the annotation is inherited, the application code that retrieves the annotation of a certain element can distinguish between the annotations that are inherited and those that are declared on the entity itself.

What does the @override annotation do in Java?

@Override @Override annotation informs the compiler that the element is meant to override an element declared in a superclass. Overriding methods will be discussed in Interfaces and Inheritance. While it is not required to use this annotation when overriding a method, it helps to prevent errors.


1 Answers

Just that there is no misunderstanding: You do ask about java.lang.annotation.Inherited. This is a annotation for annotations.It means that subclasses of annotated classes are considered having the same annotation as their superclass.

Example

Consider the following 2 Annotations:

@Inherited @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface InheritedAnnotationType {      } 

and

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface UninheritedAnnotationType {      } 

If three classes are annotated like this:

@UninheritedAnnotationType class A {      }  @InheritedAnnotationType class B extends A {      }  class C extends B {      } 

running this code

System.out.println(new A().getClass().getAnnotation(InheritedAnnotationType.class)); System.out.println(new B().getClass().getAnnotation(InheritedAnnotationType.class)); System.out.println(new C().getClass().getAnnotation(InheritedAnnotationType.class)); System.out.println("_________________________________"); System.out.println(new A().getClass().getAnnotation(UninheritedAnnotationType.class)); System.out.println(new B().getClass().getAnnotation(UninheritedAnnotationType.class)); System.out.println(new C().getClass().getAnnotation(UninheritedAnnotationType.class)); 

will print a result similar to this (depending on the packages of the annotation):

null @InheritedAnnotationType() @InheritedAnnotationType() _________________________________ @UninheritedAnnotationType() null null 

As you can see UninheritedAnnotationType is not inherited but C inherits annotation InheritedAnnotationType from B.

I don't know what methods have to do with that.

like image 63
fabian Avatar answered Sep 23 '22 03:09

fabian