【问题标题】:Implementation of NonNull AnnotationNonNull 注解的实现
【发布时间】:2023-03-24 03:04:01
【问题描述】:

我想我更深入地研究了旧的 Java 功能,例如注解。我遇到了 Java 8s Type Annotations,它使我们能够扩展 Javas 类型系统。 IntelliJ 的注释库或 Checkerframework 最常见的注释 'NonNull' 或 'NotNull' 对我来说仍然是个谜。在文档中,我只能找到接口的声明,但找不到 Annotation 处理器是如何实现的。 我喜欢编写自己的自定义注释,在编译时检查特定类型,但我不知道如何开始。

有人知道“NonNull”或“NotNull”通常是如何在 Annotation 处理器中实现的吗?。 或者将我指向可以回答我的问题的资源或文档?

非常感谢您的帮助。

【问题讨论】:

  • @Slaw 你能详细说明一下吗?我已经使用 java 注释处理 API 成功编写了一个自定义注释。我知道如何使用处理器,但我不明白如何确保 nullobjects 或 Objects 的类型安全
  • 您到底想发生什么?诸如 SpotBugs 之类的工具在运行时不做任何事情,而是检查编译后的代码中的错误并使用某些注释来帮助确定应该或不应该允许什么。我相信,其他工具(例如 Project Lombok)实际上会在编译期间修改您的代码,以便插入诸如空检查之类的代码。还可以选择在运行时修改类(例如,通过自定义 ClassLoader 或检测)。
  • 还有其他库,例如 Bean Validation 规范及其实现,可能会使用反射在运行时检查注释以控制执行流程。
  • 所以您想创建一个代码分析器,在编译时使用javax.annotation.processing.Processor 分析您的代码,对吗?您可能无法使用java.compiler API 做很多事情,可能不得不使用jdk.compiler API。 java.compiler API 更适合代码生成和可能的签名验证。无论如何,解释如何编写源代码分析器非常广泛——即使我知道的足够多,可以给出正确的解释。
  • 您可以尝试查看诸如 SpotBugs、PMD、Checker Framework 等开源工具,以了解它们是如何实现这些功能的。一种可能特别有用的工具是 Google 的 Error Prone

标签: java annotations javac


【解决方案1】:

您提到了 IntelliJ IDEA 和 Checker 框架。 IDEA source codeChecker Framework source code 可供您阅读和学习。 Checker 框架手册解释了 how to create a new checker 和链接到 publications 以解释更多理论。

【讨论】:

  • 我已经阅读了框架文档的“如何创建新的检查器”部分。虽然使用框架非常简单,但我对技术实现及其作为概念的工作方式更感兴趣。我还查看了“IDEA 源代码”,但找不到“NotNullProcessor”的实现。它是一个相当大的项目,仅仅参考源代码不足以回答我的问题。但是非常感谢这些出版物的链接。虽然我想在 answere 上有更多的位置,但我对论文感到不知所措
  • 如果你能提出一个具体的问题,这可能会得到一个更具体、有用和简洁的答案。如果你问一个宽泛的问题,其他人可能不知道你已经理解了什么,你不知道什么,以及你如何尝试找到答案。祝您在更好地理解实现的过程中好运!
猜你喜欢
  • 2015-03-06
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 2014-07-11
  • 2018-01-13
  • 2012-11-09
相关资源
最近更新 更多