目录
@Inherited 在 Java 中如何工作?
在 Java 中实现 @Inherited 注解的示例
示例#2
结论
首页 Java java教程 Java @Inherited

Java @Inherited

Aug 30, 2024 pm 04:22 PM
java

Java中的@inherited是一个注解,用于标记一个注解要继承给被注解类的子类。 @inherited 是一个内置注释,我们知道注释就像一个代表元数据的标签,它向编译器提供附加信息。与 Javadoc 中存在的内置注释相同,可以在 java.lang.java 文档中创建另一个元注释。实际上有两种类型的注释,一种类型的注释应用于 java 代码,如 @override,另一种类型的注释应用于其他注释,如 @target @inherited。所以@inherited是一个注释,应用于我们想要创建子类或我们想要继承以使另一个用户定义注释的其他注释。

广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法

java中@inherited的语法是-

@Inherited
public @interface MyAnnotation {// code of the MyAnnotation
}
@MyAnnotation
public class SuperClass {
// code of the SuperClass }
public class SubClass extends SuperClass { // code of the SubClass }
登录后复制

如上面的语法,类SubClass继承自注解@MyAnnotation,因为它继承自SuperClass,而SuperClass有一个@MyAnnotation注解。

@Inherited 在 Java 中如何工作?

@Inherited 注解用于或注解到注解(如上述语法中的 MyAnnotation),@interface 应为其添加前缀。接下来,可以在需要应用@MyAnnotation 的地方使用此注释(MyAnnotation)。这些注释可以在元素声明之前应用,也可以应用于程序的任何元素,如变量、类、构造函数、方法等。当此用户定义的注释被注释在超类上时,它会自动继承到子类(如上面语法中的子类),正如我们在下面的示例中看到的。

在 Java 中实现 @Inherited 注解的示例

接下来,我们编写java代码来更清楚地理解@Inherited注解,下面的示例中我们使用@Inherited注解在子类中从超类继承,如下 –

示例#1

首先,我们创建一个注解接口@MyAnnotation,它有两个字段,名称和代码。

代码://MyAnnotation.java

package demo;
import java.lang.annotation.Inherited;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Inherited
@Target ({ElementType.TYPE, ElementType.METHOD})
@Retention (RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
String name () default "unknown";
String code () default " ";
}
登录后复制

接下来,我们创建一个超类来通过注释任何类、方法或变量来使用上述注释,并提供状态名称和状态代码。

代码://Super.java

package demo;
import demo.MyAnnotation;
@MyAnnotation (name = "Karnataka", code = "KA")
public class Super
{
public String getstateinfo ()
{
return null;
}
}
登录后复制

接下来,我们使用注解,因为它是元数据,这意味着我们应该能够获取这个元数据或信息,以便在需要时使用注解信息。

代码://Demo.java

//as sub class
package demo;
import demo.MyAnnotation;
import demo.Super;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
public class Demo extends Super
{
public static void main ( String[] arg ) throws Exception
{
new Super ();
Class <Super>obj = Super.class;
getstateinfo (obj);
Method m = obj.getMethod ("getstateinfo", new Class[]{});
getstateinfo (m);
}
static void getstateinfo (AnnotatedElement e)
{
try
{
System.out.println ("Finding annotations on " + e.getClass ().getName ());
Annotation[] annotations = e.getAnnotations ();
for (Annotation a : annotations)
{
if (a instanceof MyAnnotation)
{
MyAnnotation stateInfo = (MyAnnotation) a;
System.out.println("Name of Annotation :" + stateInfo.annotationType ());
System.out.println("State Name :" + stateInfo.name ());
System.out.println("State code :" + stateInfo.code ());
System.out.println(new Demo ().getClass ().getAnnotation (MyAnnotation.class));
System.out.println(new Super ().getClass ().getAnnotation (MyAnnotation.class));
}
}
} catch (Exception ex)
{
System.out.println( ex );
}
}
}
登录后复制

输出:当我们运行 Demo.java 类时,输出为。

Java @Inherited

说明: 如上面的代码所示,创建了 MyAnnotation 注解,并由 @Inherited 进行注解。在超类中,MyAnnotation 注释由 @MyAnnotation 语句使用并注释到类中。并且创建了另一个类Demo,它是Superclass的子类,因为它扩展为Superclass。再往前,在 Demo 类的 main() 方法中,创建了 Superclass 的一个对象,并访问其方法 getstateinfo(),通过该方法迭代其所有注释并检查该注释是否是 MyAnnotation 的,如果是则打印一些正如我们在上面看到的信息。但一件重要的事情是,Demo 类或其任何元素没有注释到 MyAnnotation,但它仍然显示 MyAnnotation 注释到此类,因为它是超类固有的,而超类继承了 MyAnnotation。

接下来,我们重写上面的java代码,以便更清楚地理解@Inherited注解,下面的例子中我们不会使用@Inherited注解来注解MyAnnotation(如上例中创建的注解)来检查该注解是否被继承是否位于其超类的子类中,如下所示 –

示例#2

我们将保持 Super.java 和 Demo.java 类与上面相同,在这些类中不进行任何更改,但在 MyAnnotation.java 类中,我们做很少的更改,只是删除 @Inherited 注释以从 MyAnnotation 进行注释,正如我们在下面看到的 –

代码://MyAnnotation.java

package demo;
import java.lang.annotation.Inherited;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// no @Inherited
@Target ({ElementType.TYPE, ElementType.METHOD})
@Retention (RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
String name () default "unknown";
String code () default " ";
}
登录后复制

输出: 接下来,当我们运行 Demo.java 类时,输出为。

Java @Inherited

说明:如上面的输出,我们可以看到,在状态代码之后,打印了“null”值,即语句“new  Demo ().getClass () 的返回值” .getAnnotation(MyAnnotation.class)”,这意味着演示类没有从其超类继承(或注解)任何MyAnnotation注解,因为@Inherited注解没有注解到MyAnnotation以在子类中继承它。

结论

java中的@inherited是一个应用于另一个注解的内置注解。它用于标记要继承到被注释类的子类的注释。 @inherited 在 java.lang.annotation.Inherited 包中可用。

以上是Java @Inherited的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

Java 完美数指南。这里我们讨论定义,如何在 Java 中检查完美数?,示例和代码实现。

Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

Java 随机数生成器指南。在这里,我们通过示例讨论 Java 中的函数,并通过示例讨论两个不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。这里我们通过示例讨论简介、如何使用weka java、平台类型和优点。

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java 中的时间戳至今 Java 中的时间戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的时间戳到日期指南。这里我们还结合示例讨论了介绍以及如何在java中将时间戳转换为日期。

Java程序查找胶囊的体积 Java程序查找胶囊的体积 Feb 07, 2025 am 11:37 AM

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

See all articles