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