当前位置: 首页 > 知识库问答 >
问题:

检查注释是否被继承

贺博厚
2023-03-14

我有一个注释和三个类,像这样:

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

@MyAnnotation
public class MySuperClass {}

public class MySubClassA extends MySuperClass {}

@MyAnnotation
public class MySubClassB extends MySuperClass {}

有没有办法确定当前注释是直接在类中继承还是声明的?

类似于方法<代码>公共布尔值的东西是默认的(类

导出输出:

isInherited(MySuperClass.class, MySuperClass.class.getAnnotation(MyAnnotation.class)) --> false
isInherited(MySubClassA.class, MySubClassA.class.getAnnotation(MyAnnotation.class)) --> true
isInherited(MySubClassB.class, MySubClassB.class.getAnnotation(MyAnnotation.class)) --> false

共有1个答案

夏元明
2023-03-14

您可以使用getDeclaredAnnotation而不是getAnnotation

public boolean isInherited(Class<?> clazz, Class<? extends Annotation> annotation) {
    return clazz.isAnnotationPresent(annotation) && clazz.getDeclaredAnnotation(annotation) == null;
}
 类似资料:
  • 问题内容: 我正在使用反射来查看附加到类的属性的注释是否具有特定类型。目前我正在做: 这让我有些不高兴,因为它依赖于完全合格的类名称的字符串。如果将来更改命名空间,则可能会导致细微的错误。 我想要做: 但是是抽象类,无法实例化。有没有一种方法可以针对接口或抽象类进行模拟(或基本上使用)? 问题答案: 你只是在寻找 ?

  • 在静态编程语言1.3.30中,添加了对增量注释处理的支持:https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/根据文档: 请注意,在当前实现中,使用任何非增量注释处理器或依赖项的 ABI 更改(到目前为止,包括修改内部声明)将导致给定模块的非增量注释处理。 我有一个带有多个注释处理器的多模块项目。只有一部分是增量的。至少

  • 问题内容: PHP中是否可以使用任何函数来检测该函数是否可用? 问题答案: 编辑:根据Ziagl的评论修复了爆炸。

  • 我有一个包含三个字段的表,比如a、b、c。我想添加一个约束,确保如果a不为null,那么b和c也不为null。我已经使用以下SQL完成了这项工作 使用hibernate注解@Check有没有办法达到同样的效果? 我找不到一个有用的注释示例,开发人员倾向于根本不使用它吗?

  • 问题内容: 我正在探索批注,并得出了一些批注似乎在其中具有层次结构的观点。 我正在使用注释在Cards的后台生成代码。卡的类型不同(因此代码和注释也不同),但是其中某些特定的元素(例如名称)是相同的。 这就是常见的注释: 在上面的示例中,我希望Move可以继承method3,但会收到一条警告,指出扩展对注释无效。我试图让Annotation扩展一个通用的基数,但这是行不通的。那有可能还是仅仅是设计

  • 问题内容: 如何检查a 是否被选中? 问题答案: 使用isSelected方法。 您还可以使用ItemListener,以便在选中或取消选中它时收到通知。