Java的注释有多种应用程序。首先,它们可能由编译器(或编译器扩展)使用。考虑例如Override注释:
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标准(持久性,依赖项注入,您将其命名)都使用了这种注释处理,以提供必要的元数据和配置信息。