为了账号安全,请及时绑定邮箱和手机立即绑定

如何验证注释仅在某些类上使用?

如何验证注释仅在某些类上使用?

慕村225694 2021-04-12 17:14:49
说我有一个注释@Annotate和一个类A。如何检查是否@Annotate仅在类A及其子类上使用(可能在编译时)?因此,如果我们有:/* Example 1 */public class A {}  public class B extends A {}public class C {}我如何检查可以注释的类A和类B,@Annotate但C不允许使用类(可能会引发编译错误)。如果我们决定在编译时进行检查:/* Example 2 */public class A {}  @Annotatepublic class B extends A {}示例2不会引发编译时错误,因为@Annotate它用于的子类A。但是,示例3将引发编译错误,因为@Annotate未在的子类上使用它A。/* Example 3 */@Annotatepublic class C {}但是,无论如何都不必在编译时进行检查。我个人认为这样做是有意义的。
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

你可以用我的checker-framework。


只需@CheckType在您的注释上添加注释


@Target(TYPE)

@CheckType(value = A.class, type = Type.EXTEND_ALL)

public @interface OnlyOnA {

}

现在,它可以检查它是否在A或其子类上进行了注释。

会产生编译错误

  • 蚀快照

//img1.sycdn.imooc.com//60892e820001852a04110215.jpg

  • Maven快照

//img1.sycdn.imooc.com//60892e930001b94f10230462.jpg


查看完整回答
反对 回复 2021-04-28
  • 2 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信