1

注释的语义@Target似乎在Java 7之间发生了变化

如果注解类型声明中不存在 Target 元注解,则声明的类型可用于任何程序元素。

Java 8

如果注解类型 T 上不存在 @Target 元注解,则类型 T 的注解可以写为除类型参数声明之外的任何声明的修饰符。

(强调我的)。这具有令人讨厌的后果,即任何使用 Java 6/7 编译的注释都不能用于类型参数或类型使用。有没有办法绕过这个限制?

4

1 回答 1

2

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

在 Java 8 之前,注解根本不能用于类型参数声明或类型使用,因此允许在这些情况下使用 un @Target-ed 注解会破坏 Java 8 之前的现有注解类型所同意的约定。

于 2014-07-14T13:50:04.753 回答