如何在 Java 中使用 @inherited 注解?

How to use @inherited annotation in Java?(如何在 Java 中使用 @inherited 注解?)
本文介绍了如何在 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 没有被继承,但 CB 继承注释 InheritedAnnotationType.

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

我不知道这与什么方法有关.

这篇关于如何在 Java 中使用 @inherited 注解?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)