没有方法/常量定义的接口的用途



我是Java新手。我能够在没有任何错误的情况下编译以下接口。

文件名:empty_interface.java

文件内容:

public interface empty_interface {}

问题

a) 接口,我相信,是实现者必须实现的一个契约。如果实现者扩展了上述接口,那么它将实现什么?

b) 可能与a)。。。但我来了。。。为什么编译器会允许未定义的接口成功编译?

JDK中已经有许多"标记"接口。这只是表示一些不需要方法的东西。

最常见的例子是Serializable,它表示类可以被序列化。库完成其余的工作,因此不需要其他方法。

一个模糊的是RandomAccess,它表示可以以有效的方式随机访问列表。Collections.sort()使用它.

另一个类是Cloneable,它是一个标记接口,但可能应该有一个方法

public Object clone();

自从Java5.0以来,添加这样的元信息的更好方法是使用Annotations,但这些以前是不可用的。

以下是Jon Skeet对java 中类似问号界面的出色回答

空接口是满足多个角色的标记接口。

序列化需要一个实现Serializable的类的实例。接口存在的唯一原因是通过不存在来标记不可序列化的类(以及开发人员不关心序列化的类),并让自己类的开发人员思考他们的类是否可序列化。

奇怪的是,Serializable提到了几个可选的方法。

另一个假设有效但不太有用的用途是接受多个不相关的类,而不接受所有所述类。

接口没有定义,只是没有为其定义方法。

空接口通常用作类是否支持某些行为的标志。

这是否是一个好的模式还有争议,实践中一个很好的例子是可克隆和可序列化。Cloneable让您知道实现它的类可以通过Object.clone进行克隆,而Serializable让您知道该实现类允许序列化。

我个人认为这没有错。

最新更新