說我有一個注釋@Annotate和一個類A。如何檢查是否@Annotate僅在類A及其子類上使用(可能在編譯時)?因此,如果我們有:/* Example 1 */public class A {} public class B extends A {}public class C {}我如何檢查可以注釋的類A和類B,@Annotate但C不允許使用類(可能會引發(fā)編譯錯誤)。如果我們決定在編譯時進(jìn)行檢查:/* Example 2 */public class A {} @Annotatepublic class B extends A {}示例2不會引發(fā)編譯時錯誤,因?yàn)锧Annotate它用于的子類A。但是,示例3將引發(fā)編譯錯誤,因?yàn)锧Annotate未在的子類上使用它A。/* Example 3 */@Annotatepublic class C {}但是,無論如何都不必在編譯時進(jìn)行檢查。我個人認(rèn)為這樣做是有意義的。
2 回答

慕碼人2483693
TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個贊
你可以用我的checker-framework。
只需@CheckType在您的注釋上添加注釋
@Target(TYPE)
@CheckType(value = A.class, type = Type.EXTEND_ALL)
public @interface OnlyOnA {
}
現(xiàn)在,它可以檢查它是否在A或其子類上進(jìn)行了注釋。
會產(chǎn)生編譯錯誤
蝕快照
Maven快照
添加回答
舉報(bào)
0/150
提交
取消