我看到了一些代码,我正在努力理解它。在下面的代码中,接口扩展了注释。我不明白为什么有可能。有一个接口扩展注释有什么意义?如何使用扩展注释的接口?谢谢!
public interface TheScope extends javax.inject.Scope {
...
}
public ScopeClazz implements TheScope {
...
}
答案 0 :(得分:1)
根据Java annotation types specification:
除非在此明确修改,否则适用于普通接口声明的所有规则都适用于注释类型声明。
例如,注释类型与普通类和接口类型共享相同的命名空间;和注释类型声明在接口声明合法的任何地方都是合法的,并且具有相同的范围和可访问性。
因此,您可以像接口一样实现注释类型。唯一的区别是你不能用另一个注释扩展注释。
答案 1 :(得分:0)
javax.inject.Scope也是一个接口(还有什么?!) 见http://docs.oracle.com/javaee/6/api/javax/inject/Scope.html
答案 2 :(得分:0)
除了可用作注释外,annotation types are ordinary interfaces。这在运行时读取注释时很有用,因为注释可以表示为注释类型的实例。
作为此实现选择的副作用,您可以像任何其他接口一样扩展或实现它们。这与使用此类型作为注释完全无关。由于这意味着相同类型将用于两个不同的事物(作为注释类型和普通界面),这种使用可能会违反关注点的分离,并且是不常见的。但是,从语言的角度来看,语义清晰且不危险,因此没有理由要求编译器防止出现这种角落情况。