【问题标题】:What is the purpose of marker interface? [duplicate]标记界面的目的是什么? [复制]
【发布时间】:2011-08-21 09:16:39
【问题描述】:

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

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

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

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

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

现在让我们看看它有什么用处。

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

是的,我们可以通过某种 bolean flag 来实现这种行为。但那 将是一个糟糕的方法。

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

如果以上理解正确,请告知?

【问题讨论】:

  • 有重复项。让我找到他们

标签: java interface


【解决方案1】:

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

请注意,Cloneable 回顾过去被视为一个糟糕的设计选择。

如果在实现序列化时已经存在注解,Serializable 当然可以通过注解实现。

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

【讨论】:

  • 这个链接也展示了同样的东西javarevisited.blogspot.in/2012/01/…
  • 我认为我们不能将某些东西称为反模式,原因很简单,解决方案可以以另一种方式实现……注解提供动态解决方案,而标记接口在编译时上下文中提供了相同的解决方案,并具有作为“持有者”接口的额外好处,以便我们稍后可以声明方法。所以它们是两种不同的模式,因此你的论点不是论点。接口是由它允许我们在实践中做的事情来定义的,而不是由它的解释语义来定义的。或者,也许您会解释为什么这具体会成为一个真正明显的问题?
猜你喜欢
  • 2010-11-04
  • 2014-10-25
  • 1970-01-01
  • 2014-08-16
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
相关资源
最近更新 更多