有没有可能在注解中实现接口?就像这样:
public @interface NotNull implements LevelInterface {
ValidationLevel level();
};
有没有可能在注解中实现接口?就像这样:
public @interface NotNull implements LevelInterface {
ValidationLevel level();
};
不,编译器提示:
注解类型声明不能具有显式的超级接口
您也无法扩展:
注解类型声明不能具有显式的超类
不,注解不能有超级接口*(虽然接口可以从注解继承,并且类可以实现注解,但我认为这两种做法都很糟糕)
[*] 有趣的是:我找不到任何明确说明这一点的文件,除了Java编译器输出之外(既不是Sun Java教程,也不是Java 1.5注解规范)
不可以,正如我在评论中所说。但是,您可以使用委托(如AlexR所说)。但是,您必须使用枚举:
public enum LevelEnum implements LevelInterface {
DEFAULT {
public ValidationLevel level() {
// SNIP (your code)
}
};
}
public @interface NotNull {
LevelEnum level() default LevelEnum.DEFAULT;
}
LevelEnum level() default LevelEnum.DEFAULT;
。你不能使用接口作为类型,并传入实现该接口的不同枚举值。 - Sean Patrick Floyd简短的回答是不行的(就像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;
}
@NotNull(level=Something)
,你必须像这样声明 level:LevelInterface level() default foo;
但正如我之前所说,这不会编译通过(LevelInterface 和 foo 都无效)。参考资料 - Sean Patrick Floydlevel = foo;
成为了一个public static final
,类似于在普通接口中声明“字段”。 - Simon Forsberg
<pre>
格式化代码块。选择一个代码块,然后点击带有两个花括号的按钮(或按下ctrl+k)。 - Sean Patrick Floyd