标记界面的内部实现是什么?

时间:2015-05-02 06:40:58

标签: java interface

我对'标记界面'有所了解,标记界面没有任何成员。例如:SerialiazableCloneable

我在google搜索中发现标记接口用于向JVM发送一些指令? I want to know what are those instructions以及我如何理解?请帮我一个真实世界的例子。

3 个答案:

答案 0 :(得分:2)

标记接口是一种标记某个类是或做某些事情的方法,甚至那些事物也不表示为实际方法。例如SerialiazableCloneable等。由于引入注释,它们几乎总是首选,尽管它们不能完全取代Marker接口,如Joshua Bloch所建议的那样

  

...你可能听说它说标记注释(第35项)是标记   接口已过时。这个断言是不正确的。标记界面   与标记注释相比有两个优点。首先,   标记接口定义由实例实现的类型   标记的类;标记注释没有。这个存在   type允许您在编译时捕获您无法捕获的错误   如果使用标记注释,则捕获到运行时....

Serializable的情况下,类实现此接口以指示其非瞬态数据成员可以写入ObjectOutputStream。序列化对象还需要保持系统间的兼容性,这是一个明确的设计决策,因此需要使用标记接口来识别这些候选者。

类似地,实现Cloneable告诉JVM该类实现Cloneable,因此JVM必须逐位复制它。

答案 1 :(得分:1)

  

在谷歌搜索中发现标记接口用于向JVM发送一些指令?

没有。它们用作其他Java代码的标记。

  

我想知道这些说明是什么

instanceof测试没有什么异国情调。

答案 2 :(得分:1)

标记界面没有实现。

但是,标记接口通常会影响其他类的行为。

  

我在google搜索中发现标记接口用于向JVM发送一些指令?

这是不正确的。

它正在做的是向JVM或JVM提供或在JVM上运行的类提供信息。该信息不是“指令”的形式。相反,它是班级的标签。

例如,当您将类声明为Serializable时,您将信息传递给ObjectInputStreamObjectOutputStream,可以序列化该类的实例。您正在以类本身的形式传递该信息;即ObjectInputStreamObjectOutputStream可以使用instanceof(或等效的)来测试对象是否可序列化。

  

请帮我一个真实世界的例子。

Serializable和Cloneable是Java类库中众所周知的示例。

还有其他接口具有“类似标记接口”的方面。例如,CloseableAutocloseable都有一个close()方法可以执行相同的操作。区别在于AutoCloseable被“try with resources”语句视为标记。

最后,OO设计纯粹主义者不赞成标记接口。您可以使用Java注释实现相同的目的。