【问题标题】:Can an annotation compiled with Java 6/7 be used on type parameters in Java 8?使用 Java 6/7 编译的注解可以用于 Java 8 中的类型参数吗?
【发布时间】:2014-07-14 13:20:53
【问题描述】:

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

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

Java 8

如果注释类型 T 上不存在 @Target 元注释, 那么类型 T 的注解可以写成任何修饰符 声明类型参数声明除外

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

【问题讨论】:

    标签: java annotations java-8 type-annotation


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,这是有道理的,但我将不存在的@Target 的语义解释为“允许在任何地方,即使在未来的语言版本中”。这就是为什么 JSR 330 的作者没有将 @Target 放在 @Named 上的原因,例如,他们希望在将它们添加到语言中时将其应用于类型使用。无论如何,你是说我的问题的答案是“不”吗?
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2013-01-20
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多