【问题标题】:In Java, why does @Nullable have runtime rentention在Java中,为什么@Nullable 有运行时保留
【发布时间】:2014-08-07 01:01:04
【问题描述】:

正如标题所说,@Nullable 和 @Nonull 可以帮助您的 ide 或 linter 在编译时捕获错误,但为什么它具有运行时保留?

【问题讨论】:

  • 也许它通过让运行时相信不,真的,这个引用不为空来防止 NPE。 ;)
  • 对于@Nullable,这意味着如果您覆盖该方法,则覆盖也应该接受空值。为了实现这一点,注释应该至少具有类保留。此评论是部分答案。
  • @emory 在覆盖带注释的方法的情况下,类保留有什么帮助?
  • @SotiriosDelimanolis 如果在源代码级别保留@Nullable,我写void m (@Nullable p),并编译它,那么类文件中就不会有注解的痕迹了。您获得类文件并将其放在您的类路径中,扩展我的类,并覆盖我的方法。您的 ide 或 linter 是如何知道我的注释的?

标签: java annotations nullable static-analysis


【解决方案1】:

可以想象,运行时保留将允许 AOP 代理检测传递给 @Nonnull-annotated 参数的空参数,并抛出异常或以其他方式处理它。您可能会争辩说,与在代码中使用显式 null 检查相比,这是一种处理运行时 null 检查的更好方法。

是的,这些注解对于静态编译检查非常有用,但没有理由不能在运行时将它们用于相同目的。它们作为注解的有效性延伸到运行时域,不像用于代码生成之类的注解。

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2020-12-31
    • 2015-03-18
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多