[英]Can Annotation implement interfaces?
注釋中是否有可能實現接口? 就像是:
public @interface NotNull implements LevelInterface {
ValidationLevel level();
};
不,編譯器說:
注釋類型聲明不能具有顯式的超接口
你不能延長:
注釋類型聲明不能具有顯式超類
不,注釋不能有超級接口* (雖然接口可以從注釋擴展,類可以實現注釋,這兩者都是一個可怕的實踐imho)
[*]有趣的是:我找不到任何明確說明的文檔,除了java編譯器輸出(既不是Sun Java教程 ,也不是Java 1.5 Annotations規范 )
不,你不能(如我的評論所述)。 您可以使用委托(如AlexR所述)。 但是,您必須使用枚舉:
public enum LevelEnum implements LevelInterface {
DEFAULT {
public ValidationLevel level() {
// SNIP (your code)
}
};
}
public @interface NotNull {
LevelEnum level() default LevelEnum.DEFAULT;
}
簡短的回答是否定的(正如Thilo所說)。
很長的答案是,如果你真的希望這樣的功能你可以使用委托:注釋可以容納你希望實現任意數量的字段,你想要的接口。 請參閱以下示例:
public interface LevelInterface {
public int level();
}
public static LevelInterface foo = new LevelInterface() {
@Override
public int level() {
return 123;
}
};
public @interface NotNull {
LevelInterface level = foo;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.