标记界面的目的是什么?

可能重复:
标记界面
标记界面的目的是什么?

我知道什么是标记接口 – 没有方法的接口。 示例:可序列化,远程,可克隆。

我想知道标记接口的目的是什么。 这是我的理解: –

基本上只是从普通对象中识别特殊对象。 与序列化的情况一样,需要序列化的对象必须实现可序列化的接口,并且如果它是可序列化的实例,则必须在某处检查writeObject()方法。 据我所知,这是使用接口serializable(标记接口)的writeObject的唯一目的。 对? 或者jvm在可序列化接口的基础上提供了一些额外的function?

类似的逻辑适用于可克隆接口。

现在让我们看看它是如何有用的。

让我们说在一个应用程序中我们有1000个值对象。我们只想序列化100个特定对象。 现在JDK已经说过,程序员角色只是用标记接口将对象标记为特殊的,在这种情况下是可序列化的接口。现在JDK会处理哪个对象要序列化?

是的,我们可以用某种标志性的旗帜来实现这种行为。 但这将是一个糟糕的方法。

类似地我们可以说在用户定义标记接口的情况下,我们可以借助标记接口来区分特殊对象。就像我们可以使用运算符实例来确定它是否是该特定接口的实例。 如果是,则在不抛出一些exception的情况下继续。

如果上述理解正确,请告诉我们?

你的理解是正确的。 标记界面还定义了一种类型。 因此,它可以用于方法签名。 例如,Hibernate的Session.get()方法将Serializable作为参数。 它避免传递一个不可序列化为主参数的主键。

请注意,Cloneable被回顾性地视为一种糟糕的设计选择。

如果在实现序列化时存在注释,那么Serializable当然可以使用注释实现。

在大多数情况下,标记接口是反模式。 接口应该定义多态行为。 标记界面可以由注释替换。