【发布时间】:2012-02-21 12:24:38
【问题描述】:
我最近一直在阅读注释,我有点困惑。我使用了注释@NotNull,但我真的不知道它如何检查变量是否不为空。我在代码中的任何地方都没有看到任何检查 null 值的内容。这是有道理的,因为它是一个接口,所以实际处理发生在哪里,为什么代码中没有指定这个位置?我看到的例子通常只是做一个带值的注释,但不做任何其他事情,所以我对实现的位置感到困惑。
【问题讨论】:
标签: java annotations notnull
我最近一直在阅读注释,我有点困惑。我使用了注释@NotNull,但我真的不知道它如何检查变量是否不为空。我在代码中的任何地方都没有看到任何检查 null 值的内容。这是有道理的,因为它是一个接口,所以实际处理发生在哪里,为什么代码中没有指定这个位置?我看到的例子通常只是做一个带值的注释,但不做任何其他事情,所以我对实现的位置感到困惑。
【问题讨论】:
标签: java annotations notnull
注解只是一种元数据,不多不少。 当您想指定有关该类的一些详细信息时,您可以在其上添加注释。 (在某种程度上)将它们视为旧的众所周知的 XML 定义元数据的替代方法。
现在,很明显有人读取了您的 XML 并运行了使用元数据生成某些内容的代码。注释也是如此:注释所属的框架负责读取注释并使用此信息进行操作。对于@NotNull,它的hibernate-validator 项目。 java公开的API允许通过反射访问注解中的信息(java.lang.Class、Method、Field等类)。因此,在休眠验证器内部的某个地方,有一段代码会进入您的类,通过反射读取注释并检查该类是否遵守这些注释。
这些注释通常具有保留策略“运行时”,这意味着它们保留在字节码中并与携带这些注释的类一起加载。
还有一些注解应该由 Java 编译器处理。比如@Deprecated、@SuppressWarnings等等。有这样的注解的好处是可以在编译阶段发现一些代码问题。
您也可以在编译阶段放置注释处理器并“插入”它们,但情况完全不同。
希望这能澄清一下注解的用法
【讨论】: