簡體   English   中英

Annotation可以實現接口嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM