没有@Target
的注释的语义似乎在Java 7
如果注释类型中不存在Target元注释 声明,声明的类型可以在任何程序元素上使用。
如果注释类型T上没有@Target元注释, 然后可以将类型T的注释写为任何修饰符 声明除了类型参数声明。
(强调我的)。这有一个恼人的后果,即使用Java 6/7编译的任何注释都不能用于类型参数或类型用途。有没有办法解决这个限制?
答案 0 :(得分:2)
JavaDocs中的规范发生变化的原因正是为了确保语义不会更改。没有@Target
的注释可用于包,类/接口/枚举/注释类型声明,字段,构造函数,方法,构造函数和方法参数以及局部变量声明,并且不在Java 7和8之间进行了更改。
无法在类型参数声明上使用注释,或者在Java 8之前键入所有,因此在这些情况下允许使用非@Target
- ed注释会破坏签订Java 8之前约定的现有注释类型的合同。