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