使用Java 6/7编译的注释是否可以用于Java 8中的类型参数?

时间:2014-07-14 13:20:53

标签: java annotations java-8 type-annotation

没有@Target的注释的语义似乎在Java 7

之间发生了变化
  

如果注释类型中不存在Target元注释   声明,声明的类型可以在任何程序元素上使用。

Java 8

  

如果注释类型T上没有@Target元注释,   然后可以将类型T的注释写为任何修饰符   声明除了类型参数声明

(强调我的)。这有一个恼人的后果,即使用Java 6/7编译的任何注释都不能用于类型参数或类型用途。有没有办法解决这个限制?

1 个答案:

答案 0 :(得分:2)

JavaDocs中的规范发生变化的原因正是为了确保语义不会更改。没有@Target的注释可用于包,类/接口/枚举/注释类型声明,字段,构造函数,方法,构造函数和方法参数以及局部变量声明,并且在Java 7和8之间进行了更改。

无法在类型参数声明上使用注释,或者在Java 8之前键入所有,因此在这些情况下允许使用非@Target - ed注释会破坏签订Java 8之前约定的现有注释类型的合同。