首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有方法/常量定义的接口的用途

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

Stack Overflow用户
提问于 2013-08-15 00:26:05
回答 3查看 207关注 0票数 4

我是Java的新手。我能够编译下面的接口,没有任何错误。

文件名:empty_interface.java

文件内容:

代码语言:javascript
运行
复制
public interface empty_interface {}

问题

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

b)可能与a)...but在这里I go...Why编译器是否允许未定义的接口成功编译有关?

EN

回答 3

Stack Overflow用户

发布于 2013-08-15 00:28:28

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

最常见的例子是Serializable,它表示类可以序列化。库完成了剩下的工作,所以不需要额外的方法。

一个晦涩难懂的名字是RandomAccess,它意味着列表可以以一种有效的方式被随机访问。Collections.sort()使用它。

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

代码语言:javascript
运行
复制
public Object clone();

从Java 5.0开始,像这样添加元信息的更好方法是使用注释,但这在以前是不可用的。

以下是Jon Skeet对类似问题marker interface in java的出色回答

票数 8
EN

Stack Overflow用户

发布于 2013-08-15 00:27:32

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

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

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-08-15 00:27:21

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

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

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

我个人认为这没有什么问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18237204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档