How to use @inherited annotation in Java?(如何在 Java 中使用 @inherited 注解?)
问题描述
我没有在 Java 中获得 @Inherited 注释.如果它自动为您继承方法,那么如果我需要以自己的方式实现该方法,那又如何呢?
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 ?
另外据说如果我不想使用它,而是以老式的 Java 方式来做,我必须实现 equals()、toString(),Object类的hashCode()方法,以及java.lang.annotation.Annotation类的注解类型方法.
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.
这是为什么呢?
即使我不知道 @Inherited 注释和过去也可以正常工作的程序,我也从未实现过这些.
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.
推荐答案
只是没有误会:你确实问java.lang.annotation.Inherited.这是注解的注解.表示被注解的类的子类被认为与它们的超类具有相同的注解.
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.
考虑以下 2 个注释:
Consider the following 2 Annotations:
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedAnnotationType {
}
和
@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 {
}
运行此代码
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
如您所见,UninheritedAnnotationType 没有被继承,但 C 从 B 继承注释 InheritedAnnotationType.
As you can see UninheritedAnnotationType is not inherited but C inherits annotation InheritedAnnotationType from B.
我不知道这与什么方法有关.
这篇关于如何在 Java 中使用 @inherited 注解?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 Java 中使用 @inherited 注解?
基础教程推荐
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
