Annotation可以实现接口吗?

时间:2011-01-18 09:17:39

标签: java interface annotations

注释中是否有可能实现接口?类似的东西:

public @interface NotNull implements LevelInterface  {
    ValidationLevel level();
};

4 个答案:

答案 0 :(得分:12)

不,编译器说:

  

注释类型声明不能具有显式的超接口

您无法延伸:

  

注释类型声明不能具有显式超类

答案 1 :(得分:12)

不,注释不能有超级接口 * (尽管接口可以从注释扩展,类可以实现注释,这两种方式都是非常糟糕的实践)

[*]有趣的是:我找不到任何明确说明的文档,除了java编译器输出(Sun Java TutorialJava 1.5 Annotations specification

答案 2 :(得分:4)

不,你不能(如我的评论所述)。您可以使用委托(如AlexR所述)。但是,您必须使用枚举:

public enum LevelEnum implements LevelInterface {
  DEFAULT {
    public ValidationLevel level() {
      // SNIP (your code)
    }
  };
}

public @interface NotNull {
  LevelEnum level() default LevelEnum.DEFAULT;
}

答案 3 :(得分:1)

简短回答是否定(正如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;
 }