java - 注释的处理发生在哪里?

标签 java annotations notnull

我最近一直在阅读注释,我有点困惑。我使用了注释 @NotNull但我真的不知道它如何检查变量是否不为空。在代码的任何地方我都没有看到任何检查空值的东西。这是有道理的,因为它是一个接口(interface),那么实际处理发生在哪里,为什么不在代码中指定这个位置?我见过的例子通常只是做一个带有值的注释,但不做任何其他事情,所以我对实现发生在哪里感到困惑。

最佳答案

注释只是一种元数据,不多也不少。 当您想指定有关类的一些细节时,您可以在上面添加注释。 将它们(在某种程度上)视为定义元数据的旧的众所周知的 XML 方法的替代方法。

现在,很明显有人读取了您的 XML 并运行了使用元数据创建内容的代码。注释也是如此:注释所属的框架负责读取注释并使用此信息进行处理。对于 @NotNull,它的 hibernate-validator 项目。 java暴露的API允许通过反射访问注解中的信息(java.lang.ClassMethodField、等等)。所以在 hibernate validator 内部的某个地方有一个代码进入你的类,通过反射读取注释并检查类是否遵守这些注释。 这些注释通常具有保留策略“运行时”,这意味着它们保留在字节码中并与携带这些注释的类一起加载。

还有一些注释应该由 Java 编译器处理。比如@Deprecated@SuppressWarnings等等。具有此类注释的好处是您可以在编译阶段发现一些代码问题。

您也可以在编译阶段放置注释处理器并“插入”它们,但这是完全不同的故事。

希望这能稍微澄清注释的用法

关于java - 注释的处理发生在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051504/

相关文章:

Mysql - 将空值复制到非空表中

sql - PostgreSQL - 不为 null 且不为空字符串的空值

python - 查找没有有限值的 Pandas 数据框的行索引

ios - 将 UIButton 添加到 mapkit 中的注释标注

java - 如何在 Kotlin 生成的 Java 代码中禁用 @NonNull/@Nullable 注释

java - 使用注释修改方法

java - 如何使用 thymeleaf 和 spring 用列表填充下拉列表

java - 最好处理 2 个重叠的实时更新面板?

java - java中的执行命令

java - ElasticSearch post_filter Java API问题