我对'标记界面'有所了解,标记界面没有任何成员。例如:Serialiazable
,Cloneable
等
我在google搜索中发现标记接口用于向JVM发送一些指令? I want to know what are those instructions
以及我如何理解?请帮我一个真实世界的例子。
答案 0 :(得分:2)
标记接口是一种标记某个类是或做某些事情的方法,甚至那些事物也不表示为实际方法。例如Serialiazable
,Cloneable
等。由于引入注释,它们几乎总是首选,尽管它们不能完全取代Marker接口,如Joshua Bloch所建议的那样
...你可能听说它说标记注释(第35项)是标记 接口已过时。这个断言是不正确的。标记界面 与标记注释相比有两个优点。首先, 标记接口定义由实例实现的类型 标记的类;标记注释没有。这个存在 type允许您在编译时捕获您无法捕获的错误 如果使用标记注释,则捕获到运行时....
在Serializable
的情况下,类实现此接口以指示其非瞬态数据成员可以写入ObjectOutputStream
。序列化对象还需要保持系统间的兼容性,这是一个明确的设计决策,因此需要使用标记接口来识别这些候选者。
类似地,实现Cloneable
告诉JVM该类实现Cloneable
,因此JVM必须逐位复制它。
答案 1 :(得分:1)
在谷歌搜索中发现标记接口用于向JVM发送一些指令?
没有。它们用作其他Java代码的标记。
我想知道这些说明是什么
instanceof
测试没有什么异国情调。
答案 2 :(得分:1)
标记界面没有实现。
但是,标记接口通常会影响其他类的行为。
我在google搜索中发现标记接口用于向JVM发送一些指令?
这是不正确的。
它正在做的是向JVM或JVM提供或在JVM上运行的类提供信息。该信息不是“指令”的形式。相反,它是班级的标签。
例如,当您将类声明为Serializable
时,您将信息传递给ObjectInputStream
和ObjectOutputStream
,可以序列化该类的实例。您正在以类本身的形式传递该信息;即ObjectInputStream
和ObjectOutputStream
可以使用instanceof
(或等效的)来测试对象是否可序列化。
请帮我一个真实世界的例子。
Serializable和Cloneable是Java类库中众所周知的示例。
还有其他接口具有“类似标记接口”的方面。例如,Closeable
和Autocloseable
都有一个close()
方法可以执行相同的操作。区别在于AutoCloseable
被“try with resources”语句视为标记。
最后,OO设计纯粹主义者不赞成标记接口。您可以使用Java注释实现相同的目的。