我想不出能够在 Java 中注释接口的用例。
也许有人可以给我一个例子?
我在 Spring 中使用它来注释应该应用于所有子类的接口。例如,假设您有一个 Service 接口,并且您可能有该接口的多个实现,但您希望应用安全注释而不考虑注释。在这种情况下,对接口进行注释是最有意义的。
我正在使用的一个用例是 javax/hibernate bean 验证,我们使用接口来帮助我们避免在每个特定类上定义验证。
public interface IUser {
@NotNull Long getUserId();
...
}
public class WebUser implements IUser {
private Long userId;
@Override
public Long getUserId(){
return userId;
}
...
}
即使没有示例,也应该清楚地解释-接口描述行为,注释也可以,因此将它们放在一起是合乎逻辑的。
我见过很多研究工具使用方法注解来让用户指定协议、限制等,方便以后自动检查。
由于注释并不规定您可以使用它们做什么,因此没有充分的理由不允许用户对接口进行注释。
您可以将它用于合同风格的编程 - 比仅仅定义接口(类型和方法名称)更进一步,还可以定义一些语义(类型的内容、前置条件、后置条件)。
不过,我必须检查注释在 Java 中是如何工作的,但是这些东西可以很容易地用 Python 注释来完成......
在 JBoss 下部署应用程序时,您可以使用接口上的注释在 jmx-console 中导出服务。
我在定义 REST 接口时使用过它。RESTeasy 允许您创建使用带注释接口的 REST 客户端(本例中为 RESTInterfaceV1):
final RESTInterfaceV1 client = ProxyFactory.create(RESTInterfaceV1.class, "http://localhost:8080/rest");
尽管注释必须在实际实现 REST 接口的对象上复制,但接口本身可以单独分发给那些想要创建 Java REST 客户端的人。
我用@Immutable 标记我的接口,以便向子类的开发人员清楚地表明实现该接口的类应该具有哪些可变性契约。正如 gehel 所说,按合同编程。