标记界面的目的是什么?

时间:2011-08-21 09:16:40

标签: java interface

  

可能重复:
  marker interface
  What is the purpose of a marker interface?

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

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:14)

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

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

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

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