【问题标题】:Can annotations totally replace Marker Interfaces?注释可以完全取代标记接口吗?
【发布时间】:2013-02-18 11:42:08
【问题描述】:

由于标记接口主要用于标记一个类,同样的事情可以通过注释来实现。比如Cloneable接口可以是@Cloneable

那么仍然需要标记接口还是可以通过注释来替代?使用其中任何一个有什么优点/缺点吗?我的意思是更喜欢一个?

【问题讨论】:

  • 标记接口甚至在泛型之前就被建立为反模式。
  • @MarkoTopolnik 以前元数据需要标记接口,但现在可以使用注释来实现。这就是为什么它被称为反模式,对吗?
  • 是的,而且即使在 Java 1.4 上,也有人建议在没有标记接口的情况下进行设计。标记接口是对多态性概念的滥用。
  • 反对者是否愿意发表评论?

标签: java annotations marker-interfaces


【解决方案1】:

标记接口在用于定义类型时比注释更好。例如,Serializable 可以(并且应该使用)作为必须可序列化的参数的类型。注释不允许这样做:

public void writeToFile(Serializable object);

如果标记接口不定义类型,而只定义元数据,那么注释会更好。

【讨论】:

    【解决方案2】:

    还有一点需要提及的是使用注释的成本。要检查对象是否是接口的实例,可以使用instanceof,这是当今相对低成本的操作。使用注解需要Java reflection 调用,而且成本更高。

    【讨论】:

      猜你喜欢
      • 2018-04-22
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2011-01-25
      • 2011-04-24
      相关资源
      最近更新 更多