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

说我有一个注释@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 {


}  


@Annotate

public class B extends A {


}

示例2不会引发编译时错误,因为@Annotate它用于的子类A。但是,示例3将引发编译错误,因为@Annotate未在的子类上使用它A。


/* Example 3 */


@Annotate

public class C {


}

但是,无论如何都不必在编译时进行检查。我个人认为这样做是有意义的。


慕村225694
浏览 169回答 2
2回答

慕码人2483693

你可以用我的checker-framework。只需@CheckType在您的注释上添加注释@Target(TYPE)@CheckType(value = A.class, type = Type.EXTEND_ALL)public @interface OnlyOnA {}现在,它可以检查它是否在A或其子类上进行了注释。会产生编译错误蚀快照Maven快照
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java