繁体   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