在Java中如何以及在何处使用注释?
2022-08-31 05:48:08
我们可以使用批注的主要领域是什么?该功能是否替代了基于 XML 的配置?
注释是元元对象,可用于描述其他元对象。元对象是类、字段和方法。请求对象为其元对象(例如 ) 称为内省。内省可以走得更远,我们可以问一个元对象它的注释是什么(例如)。内省和注释属于所谓的反射和元编程。anObj.getClass()
aClass.getAnnotations
注释需要以某种方式进行解释才能有用。注释可以在开发时由 IDE 或编译器解释,也可以在运行时由框架解释。
注释处理是一种非常强大的机制,可以以许多不同的方式使用:
@Deprecated, @Override
@NotNull
@Entity, @TestCase, @WebService
@Statefull, @Transaction
@Column, @XmlElement
在所有情况下,注释都用于描述元素并阐明其含义。
在 JDK5 之前,现在用注释表示的信息需要存储在其他位置,并且经常使用 XML 文件。但是使用注释更方便,因为它们将属于Java代码本身,因此比XML更容易操作。
注释的用法:
...例如,看看龙目岛项目,它使用注释来定义如何生成或方法。equals
hashCode
Java的注释有多个应用程序。首先,它们可以由编译器(或编译器扩展)使用。例如,考虑覆盖注释:
class Foo {
@Override public boolean equals(Object other) {
return ...;
}
}
这个实际上是内置于Java JDK中的。如果某个方法用它标记,编译器将发出错误信号,该错误不会重写从基类继承的方法。此注释可能有助于避免常见的错误,即您实际上打算重写某个方法,但未能这样做,因为方法中给出的签名与被覆盖方法的签名不匹配:
class Foo {
@Override public boolean equals(Foo other) { // Compiler signals an error for this one
return ...;
}
}
从 JDK7 开始,允许在任何类型上使用注释。此功能现在可用于编译器注释,例如NotNull,例如:
public void processSomething(@NotNull String text) {
...
}
它允许编译器警告您有关变量和空值的不正确/未检查的使用。
另一个更高级的注释应用程序涉及运行时的反射和注释处理。这就是(我认为)当你把注释说成是“基于XML的配置的替代品”时所想到的。例如,这是各种框架和JCP标准(持久性,依赖注入,您命名它)使用的注释处理类型,以便提供必要的元数据和配置信息。