掌桥专利:专业的专利平台
掌桥专利
首页

注解继承方法、装置及电子设备

文献发布时间:2023-06-19 10:22:47


注解继承方法、装置及电子设备

技术领域

本发明涉及程序开发技术领域,具体而言,涉及一种注解继承方法、装置及电子设备。

背景技术

Java是一门面向对象程序开发,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java开发包或Java开发工具(Java Development Kit,JDK)是Java的核心,而注解(Annotation)则是Java中一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

Java的主要特征之一是继承,继承是面向对象编程技术的一块基石,它允许创建分等级层次的类,进一步地,继承是指子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。但是在Java中,一些父类的注解无法被子类所继承,降低了组件和业务代码开发的便捷性。

发明内容

为了至少克服现有技术中的上述不足,本发明的目的之一在于提供注解继承方法、装置及电子设备。

本发明实施例的第一方面,提供了一种注解继承方法,包括:

检测目标类是否存在目标注解,若未检测到所述目标类存在所述目标注解,获取所述目标类的父类;使设定计数值加一,其中,所述设定计数值的初始值为零;

判断所述父类是否存在所述目标注解;

若所述父类存在所述目标注解,根据所述设定计数值以及所述目标类与所述父类之间的第一关系和第一策略,确定所述目标类是否继承所述目标注解。

在一种可选的方式中,所述根据所述设定计数值以及所述目标类与所述父类之间的第一关系和第一策略,确定所述目标类是否继承所述目标注解,包括:

若所述第一关系为实现接口且所述第一策略为第一设定策略,获取所述目标注解的继承深度值;

判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解,若所述差值小于零,确定所述目标类未继承所述目标注解。

在一种可选的方式中,所述根据所述设定计数值以及所述目标类与所述父类之间的第一关系和第一策略,确定所述目标类是否继承所述目标注解,包括:

若所述第一关系为实现抽象类且所述第一策略为第二设定策略,获取所述目标注解的继承深度值;

判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解,若所述差值小于零,确定所述目标类未继承所述目标注解。

在一种可选的方式中,所述方法还包括:

若所述父类未存在所述目标注解,则将所述父类确定为当前类,并使所述设定计数值再加一;

判断当前类的父类是否为超级父类;

若是,确定所述目标类未继承所述目标注解;

否则,在当前类的父类存在所述目标注解时,确定当前类与当前类的父类之间的关系和策略;

根据所述目标类至当前类的父类之间的全部关系和全部策略的一致性,以及所述继承深度值与所述设定计数值的差值,确定所述目标类能否继承所述目标注解;

若当前类的父类不存在所述目标注解,则将当前类的父类确定为当前类,使所述设定计数值再加一,并再次执行所述判断当前类的父类是否为超级父类的步骤。

在一种可选的方式中,若所述目标类为目标方法,所述根据所述设定计数值以及所述目标类与所述父类之间的第一关系和第一策略,确定所述目标类是否继承所述目标注解,包括:

若所述第一关系为子类覆盖父类方法且所述第一策略为第三设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解;

若所述第一关系为子类实现父类抽象方法且所述第一策略为第四设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解;

若所述第一关系为子类实现接口方法且所述第一策略为第四设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解。

本发明实施例的第二方面,提供了一种注解继承装置,包括:

父类获取模块,用于检测目标类是否存在目标注解,若未检测到所述目标类存在所述目标注解,获取所述目标类的父类;使设定计数值加一,其中,所述设定计数值的初始值为零;

注解继承确定模块,用于判断所述父类是否存在所述目标注解;若所述父类存在所述目标注解,根据所述设定计数值以及所述目标类与所述父类之间的第一关系和第一策略,确定所述目标类是否继承所述目标注解。

在一种可选的方式中,所述注解继承确定模块,还用于:

若所述父类未存在所述目标注解,则将所述父类确定为当前类,并使所述设定计数值再加一;

判断当前类的父类是否为超级父类;

若是,确定所述目标类未继承所述目标注解;

否则,在当前类的父类存在所述目标注解时,确定当前类与当前类的父类之间的关系和策略;

根据所述目标类至当前类的父类之间的全部关系和全部策略的一致性,以及所述继承深度值与所述设定计数值的差值,确定所述目标类能否继承所述目标注解;

若当前类的父类不存在目标注解,则将当前类的父类确定为当前类,使所述设定计数值再加一,并再次执行所述判断判断当前类的父类是否为超级父类的步骤。

在一种可选的方式中,若所述目标类为目标方法,所述注解继承确定模块,用于:

若所述第一关系为子类覆盖父类方法且所述第一策略为第三设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解;

若所述第一关系为子类实现父类抽象方法且所述第一策略为第四设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解;

若所述第一关系为子类实现接口方法且所述第一策略为第四设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解。

本发明实施例的第三方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的注解继承方法的步骤。

本发明实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的注解继承方法的步骤。

本发明实施例所提供的注解继承方法、装置及电子设备,能够在未检测到目标类存在目标注解时,获取目标类的父类,使设定计数值加一,并在父类存在目标注解时,根据设定计数值以及目标类与父类之间的第一关系和第一策略,确定目标类是否继承目标注解,如此,能够在目标类与父类之间存在不同关系和策略的情况下确定目标类是否继承目标注解,提高了目标类继承目标注解的灵活性,基于设定计数值能够对目标注解的继承深度值进行判定,确保了目标类继承目标注解的准确性,扩展了Java注解的继承机制,使得注解能够广泛应用于组件和业务代码的开发过程中,提高了组件和业务代码开发的便捷性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例所提供的一种注解继承方法的流程图。

图2为本发明实施例所提供的一种注解继承装置的功能模块框图。

图标:

20-注解继承装置;21-父类获取模块;22-注解继承确定模块。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

发明人经调查发现,Java中的类有普通类、抽象类和接口。对于普通类而言,子类继承父类的注解是没有问题的,但是抽象类和接口不支持注解的继承。例如,如果将动物定义为抽象类或者接口,那么动物的“聪明”这个注解,作为动物的子类的狗是无法继承的。此外,Java中也不支持方法的注解的继承。又例如,动物定义了一个行为是“吃东西”,并且打上标签“东西”,东西包含名称、重量等属性,则狗在实现吃东西的行为时是无法继承“东西”的注解的。由此可见,在Java中,一些父类的注解无法被子类所继承,这样降低了组件和业务代码开发的便捷性。

有鉴于此,本发明实施例提供了一种注解继承方法、装置及电子设备,能够在目标类与父类之间存在不同关系和策略的情况下确定目标类是否继承目标注解,提高了目标类继承目标注解的灵活性,基于设定计数值能够对目标注解的继承深度值进行判定,确保了目标类继承目标注解的准确性,扩展了Java注解的继承机制,使得注解能够广泛应用于组件和业务代码的开发过程中,提高了组件和业务代码开发的便捷性。

图1示出了本发明实施例所提供的一种注解继承方法的流程图,下面对图1所示的步骤进行详细说明:

S20,检测目标类是否存在目标注解。

在具体实施过程中,可以将元注解@Inherited修饰的注解确定为目标注解。其中,元注解是指注解的注解,包括以下四类:@Retention、@Target、@Document和@Inherited。在本申请实施例中,元注解为@Inherited。

在本申请实施例中,元注解@Inherited中包括属性value和继承深度值depth。其中,属性value是所有注解所默认的属性,继承深度值depth用于表征目标注解可以继承的深度,继承深度值depth是目标注解的作用域。在本申请实施例中,继承深度值depth为正整数。

具体地,若检测到目标类存在目标注解,则目标类本身带有目标注解,且目标类的第depth层子类能够继承该目标注解。

例如,若取depth为2,当目标类C1存在目标注解A时,若C1的子类C11能够继承C1的目标注解A,且C11的子类C111能够继承C11所继承的目标注解A,则可以确定C111能够继承C1的目标注解A。

具体地,若将C11理解为C1的下层,则depth为2可以理解为目标注解A能够向下发挥作用2层。

又例如,判断C111的子类C1111能否继承C111所继承的目标注解A时,由于C1111相对于C1处于第3层,因此,C1111不能继承C1的目标注解A。这是由于该目标注解A是存在于C1中的,而C11是继承C1的目标注解A,C111是继承C11所继承的目标注解A,也可以理解为C111是继承C1的目标注解A。depth为2表征目标注解A能够向下发挥作用2层,因此目标注解A能够发挥作用的最后一层为C111的所在层,因此,即便C1111是C111的子类,但是目标注解A的继承深度值表征目标注解A无法经C111作用到C1111,所以C1111不能继承C1的目标注解A。

在本申请实施例的后续说明中,会详细说明目标注解的继承机制,因此在此不作更多说明。

进一步地,若未检测到目标类存在目标注解,转向S21。

S21,获取目标类的父类,使设定计数值加一。

在本申请实施例中,若未检测到目标类存在目标注解,则获取目标类的父类,并使设定计数值加1。其中,设定计数值的初始值为0,设定计数值用于和目标注解的继承深度值进行比较,从而确定目标类是否能够继承目标注解,如何根据设定计数值和继承深度值确定目标类是否能够继承目标注解将在后续说明中进行说明。

为便于后续说明,目标注解可以表示为A,目标类可以表示为C1,C1的父类可以表示为C2,C2的父类可以表示为C3,C3的父类可以表示为C4,以此类推,设定计数值可以为k,k的初始值为0。

具体地,当获取到C2时,k从0自加为1,此时k=1。

S22,判断目标类的父类是否存在目标注解。

进一步地,在获取了C2之后,判断C2是否存在目标注解A,若存在,转向S23,否则,转向S24。

S23,根据设定计数值以及目标类与父类之间的第一关系和第一策略,确定目标类是否继承目标注解。

在具体实施过程中,根据设定计数值以及目标类与父类之间的第一关系和第一策略,确定目标类是否继承目标注解,具体可以通过以下两种方式实现,当然,在具体实施过程中,并不限于以下两种方式:

第一种,若C1与C2之间的第一关系为实现接口且第一策略为第一设定策略,获取目标注解A的继承深度值depth。

判断depth与k的差值是否大于等于零,若是,确定目标注解A的作用域能够从C2到达C1,此时确定C1能够继承C2中的目标注解A,否则,确定目标注解A的作用域不能够从C2到达C1,此时确定C1不能够继承C2中的目标注解A。

具体地,由于判断depth与k的差值是否大于等于零的内容与S20中所示的内容类似,因此不再举例进行说明。

第二种,若C1与C2之间的第一关系为实现抽象类且第一策略为第二设定策略,根据设定计数值k和获取到的继承深度值depth,确定C1能否继承C2中的目标注解A。由于根据设定计数值k和获取到的继承深度值depth确定C1能否继承C2中的目标注解A的方法与第一种情况类似,因此在此不作更多说明。

在本申请实施例中,第一设定策略为TYPE_INTERFACE接口策略,TYPE_INTERFACE接口策略表征在实现某个接口时,该接口的子类是可以继承该接口的注解的。更为具体地,若C1和C2之间的第一关系为实现接口且C1和C2之间的第一策略为TYPE_INTERFACE接口策略,则可以根据设定计数值k和获取到的继承深度值depth确定C1能否继承C2中的目标注解A。

在本申请实施例中,第二设定策略为TYPE_ABSTRACT抽象类策略,TYPE_ABSTRACT抽象类策略表征在实现某个抽象类时,该抽象类的子类是可以继承该抽象类的注解的。更为具体地,若C1和C2之间的第一关系为实现接口且C1和C2之间的第一策略为TYPE_ABSTRACT抽象类策略,则可以根据设定计数值k和获取到的继承深度值depth确定C1能否继承C2中的目标注解A,具体地:

若设定计数值k和继承深度值depth的差值大于等于零,则确定C1能继承C2中的目标注解A;

若设定计数值k和继承深度值depth的差值小于零,确定C1不能继承C2中的目标注解A。

可选地,若C1和C2之间的第一关系为继承且第一策略为DEFAULT,则可以根据设定计数值k和获取到的继承深度值depth确定C1能否继承C2中的目标注解A,具体地:

若设定计数值k和继承深度值depth的差值大于等于零,则确定C1能继承C2中的目标注解A;

若设定计数值k和继承深度值depth的差值小于零,确定C1不能继承C2中的目标注解A。

其中,DEFAULT表征默认使用java的继承规则。

可以理解,根据设定计数值k、继承深度值depth以及C1和C2之间的第一关系和第一策略,确定C1是否能够继承C2的目标注解A,能够在C1和C2之间存在不同关系和策略的情况下确定C1是否继承目标注解A,提高了C1继承目标注解A的灵活性,基于设定计数值k能够对目标注解A的继承深度值depth进行判定,能够确定目标注解A的有效作用域,确保了C1继承目标注解A的准确性,扩展了Java注解的继承机制。

可以理解,若根据S23确定出目标类未继承目标注解,转向S29。

S24,将目标类的父类确定为当前类,并使设定计数值再加一。

在具体实施过程中,若C2中不存在目标注解A,则将C2确定为当前类,并使设定计数值k从1再自加为2。

可以理解,若C2中不存在目标注解A,则需要确定C3中是否存在目标注解A,从而确定C2能否继承目标注解A,进而确定C1能否继承目标注解A。具体地,在确定C3中是否存在目标注解A,首选需要确定C3是否为超级父类,然后再进行后续判断,如此,能够有效减少判断次数,从而减少电子设备的计算负荷。

在具体实施时,为便于后续的说明逻辑,若父类不存在目标注解,则将该父类确定为当前类,然后继续对当前类的父类进行分析。

S25,当前类的父类是否为超级父类。

在本申请实施例中,超级父类为Object类,Object类是所有Java类的根父类,超级父类中是不存在注解的,超级父类也没有父类。

在S25中:

若当前类C2的父类C3为超级父类,转向S29;

若当前类C2的父类C3不是超级父类,转向S26。

S26,当前类的父类是否存在目标注解。

在S26中:

若当前类C2的父类C3存在目标注解A,则转向S28;

若当前类C2的父类C3不存在目标注解A,则转向S27。

S27,将当前类的父类确定为当前类,并使设定计数值加一。

在S27中,若当前类C2的父类C3不存在目标注解A,则将C3确定为当前类,并使k加1,然后返回S25继续执行对当前类的相关判断。

S28,根据目标类至当前类的父类之间的全部关系和全部策略的一致性,以及继承深度值与设定计数值的差值,确定目标类是否继承目标注解。

在具体实施过程中,确定目标类是否继承目标注解,具体可以通过以下方式实现:

根据目标类至当前类的父类之间的全部关系和全部策略的一致性,以及继承深度值与设定计数值的差值,确定目标类能否继承目标注解。

具体地,基于上述说明,目标类为C1,目标类C1的父类为当前类C2,当前类C2的父类为C3,进一步地,C1和C2之间的第一关系和第一策略可以表征为H12,C2和C3之间的第二关系和第二策略可以表征为H23。

更为具体地,若H12与H23相同,则表征C1、C2和C3之间的全部关系和全部策略存在一致性,在这种情况下,可以继续根据继承深度值与设定计数值的差值确定目标类能否继承目标注解。

在上述说明中,C1、C2和C3之间的全部关系和全部策略是否存在一致性可以通过以下示例说明:

当C1和C2之间的第一关系为实现接口且C1和C2之间的第一策略为第一设定策略时,或C1和C2之间的第一关系为实现抽象类且C1和C2之间的第一策略为第二设定策略时,若C2和C3之间第二关系与C1和C2之间的第一关系相同,并且C2和C3之间第二策略与C1和C2之间的第一策略相同,则表征H12与H23相同,进而确定C1、C2和C3之间的全部关系和全部策略存在一致性。

在C1、C2和C3之间的全部关系和全部策略存在一致性的前提下,进一步判断继承深度值与设定计数值的差值是否大于等于零,若继承深度值与设定计数值的差值大于等于零,则确定目标类继承目标注解,若继承深度值与设定计数值的差值小于零,确定目标类未继承目标注解。

例如,在C1、C2和C3之间的全部关系和全部策略存在一致性的前提下:

若继承深度值depth与设定计数值k的差值大于等于零,确定C2能够从C3处继承目标注解A,且C1能够从C2处继承目标注解A,进而确定出C1能够继承目标注解A;

若继承深度值depth与设定计数值k的差值小于零,确定C2能够从C3处继承目标注解A,但是C1不能够从C2处继承目标注解A,进而确定出C1不能够继承目标注解A,转向S29。

S29,确定目标类未继承目标注解。

在S27中,将C3确定为当前类,并使k加1,然后返回S25继续进行当前类的相关判断,可以通过以下示例进行说明:

例如,将C3确定为当前类,并使设定计数值k从2再自加为3。

进一步地,返回S25确定当前类C3的父类C4是否为超级父类:

若C4为超级父类,确定C1不能够继承目标注解A,转向S29;

若C4不为超级父类,则转向S26。

在本实施例中,以C4这轮循环执行S26时,具体通过以下方式实现:

若C4中存在目标注解A,转向S28:确定C4与C3之间的第三关系和第三策略,然后根据第一关系、第一策略、第二关系、第二策略、第三关系和第三策略确定出C1~C4之间的全部关系和全部策略的一致性,然后基于设定计数值,确定C1是否继承目标注解A,由于上述确定C1是否继承目标注解A的判断方法与上述的S28中的内容类似,因此在此不作更多说明;

若C4中不存在目标注解A,则转向S27,在执行完S27后,返回S25继续执行对当前类的相关判断。

如此,能够以超级父类为循环终止条件实现C1是否继承目标注解A的循环判定,也能够以继承深度值与设定计数值的差值为循环终止条件实现C1是否继承目标注解A的循环判定。

如此,能够避免C1是否继承目标注解A的循环判定进入无限循环流程,从而减小了电子设备的运算负荷。

在具体实施过程中,若目标类C1为目标方法,根据设定计数值以及目标类与父类之间的第一关系和第一策略,确定目标类是否继承目标注解,包括:

若第一关系为子类覆盖父类方法且第一策略为第三设定策略,获取目标类的继承深度值。判断继承深度值与设定计数值的差值是否大于等于零,若是,确定目标类继承目标注解;否则,确定目标类未继承目标注解。

若第一关系为子类实现父类抽象方法且第一策略为第四设定策略,获取目标类的继承深度值。判断继承深度值与设定计数值的差值是否大于等于零,若是,确定目标类继承目标注解;否则,确定目标类未继承目标注解。

若第一关系为子类实现接口方法且第一策略为第四设定策略,获取目标类的继承深度值。判断继承深度值与设定计数值的差值是否大于等于零,若是,确定目标类继承目标注解;否则,确定目标类未继承目标注解。

在本申请实施例中,第三设定策略为METHOD_OVERRIDE方法方法覆盖策略,METHOD_OVERRIDE方法方法覆盖策略表征子类覆盖父类的方法时,子类是可以继承父类的方法的注解的。更为具体地,若C1和C2之间的第一关系为子类覆盖父类方法且C1和C2之间的第一策略为METHOD_OVERRIDE方法方法覆盖策略,则确定C1继承目标注解A。

在本申请实施例中,第四设定策略为METHOD_ABSTRACT方法抽象策略,METHOD_ABSTRACT方法抽象策略表征子类实现父类抽象方法时,子类是可以继承父类的方法的注解的。更为具体地,若C1和C2之间的第一关系为子类实现父类抽象方法且C1和C2之间的第一策略为METHOD_ABSTRACT方法抽象策略,则确定C1继承目标注解A。可选地,若C1和C2之间的第一关系为子类实现接口方法且C1和C2之间的第一策略为METHOD_ABSTRACT方法抽象策略,则确定C1继承目标注解A。

可选地,若C1和C2之间的第一关系为继承且第一策略为DEFAULT,确定C1继承目标注解A;否则,确定C1未继承目标注解A。其中,DEFAULT表征默认使用java的继承规则。

应当理解,当C1为目标方法时,后续的目标注解确定流程与S20~S29所示的内容一致,因此在此不作更多说明。

可以理解,通过上述注解继承方法,能够扩展Java的注解继承功能,能够根据目标注解的继承深度值以及子类和父类之间的关系和策略,确定目标类能否继承目标注解,能够有效改善Java原生注解扩展性较差的问题,使得注解能够广泛应用于组件和业务代码的开发过程中,提高了组件和业务代码开发的便捷性。

在上述基础上,请结合参阅图2,本申请实施例还提供了一种注解继承装置20,包括父类获取模块21和注解继承确定模块22。

父类获取模块21,用于检测目标类是否存在目标注解,若未检测到所述目标类存在所述目标注解,获取所述目标类的父类;使设定计数值加一,其中,所述设定计数值的初始值为零;

注解继承确定模块22,用于判断所述父类是否存在所述目标注解;若所述父类存在所述目标注解,根据所述设定计数值以及所述目标类与所述父类之间的第一关系和第一策略,确定所述目标类是否继承所述目标注解。

在一种可选的方式中,所述注解继承确定模块22,用于:

若所述第一关系为实现接口且所述第一策略为第一设定策略,获取所述目标注解的继承深度值;

判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解,若所述差值小于零,确定所述目标类未继承所述目标注解。

在一种可选的方式中,所述注解继承确定模块22,用于:

若所述第一关系为实现抽象类且所述第一策略为第二设定策略,获取所述目标注解的继承深度值;

判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解,若所述差值小于零,确定所述目标类未继承所述目标注解。

在一种可选的方式中,所述注解继承确定模块22,还用于:

若所述父类未存在所述目标注解,则将所述父类确定为当前类,并使所述设定计数值再加一;

判断当前类的父类是否为超级父类;

若是,确定所述目标类未继承所述目标注解;

否则,在当前类的父类存在所述目标注解时,确定当前类与当前类的父类之间的关系和策略;

根据所述目标类至当前类的父类之间的全部关系和全部策略的一致性,以及所述继承深度值与所述设定计数值的差值,确定所述目标类能否继承所述目标注解;

若当前类的父类不存在所述目标注解,则将当前类的父类确定为当前类,使所述设定计数值再加一,并再次执行所述判断当前类的父类是否为超级父类的步骤。

在一种可选的方式中,若所述目标类为目标方法,所述注解继承确定模块22,用于:

若所述第一关系为子类覆盖父类方法且所述第一策略为第三设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解;

若所述第一关系为子类实现父类抽象方法且所述第一策略为第四设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解;

若所述第一关系为子类实现接口方法且所述第一策略为第四设定策略,获取所述目标类的继承深度值;判断所述继承深度值与所述设定计数值的差值是否大于等于零,若所述差值大于等于零,确定所述目标类继承所述目标注解;若所述差值小于零,确定所述目标类未继承所述目标注解。

本发明实施例还提供了一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述注解继承方法。

本发明实施例还提供了一种计算机可读存储介质,所述可读存储介质包括计算机程序,所述计算机程序运行时控制所述可读存储介质所在仿真模拟器执行上述注解继承方法。

综上,本发明实施例所提供的注解继承方法、装置及电子设备,能够在未检测到目标类存在目标注解时,获取目标类的父类,使设定计数值加一,并在父类存在目标注解时,根据设定计数值以及目标类与父类之间的第一关系和第一策略,确定目标类是否继承目标注解,如此,能够在目标类与父类之间存在不同关系和策略的情况下确定目标类是否继承目标注解,提高了目标类继承目标注解的灵活性,基于设定计数值能够对目标注解的继承深度值进行判定,确保了目标类继承目标注解的准确性,扩展了Java注解的继承机制,使得注解能够广泛应用于组件和业务代码的开发过程中,提高了组件和业务代码开发的便捷性。进一步地,通过设置继承深度值与设定计数值的差值是否为零以及是否存在超级父类的循环终止条件,能够避免目标类是否继承目标注解的循环判定进入无限循环流程,减小了计算机设备的运算负荷,也增加了注解继承确定的便捷性。

以上所述,仅为本发明的各种实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

相关技术
  • 注解继承方法、装置及电子设备
  • 甲片自动标注解析方法及装置、电子设备及存储介质
技术分类

06120112519151