Java中的标记接口

时间:2012-03-25 08:04:06

标签: java

Java中是否有标准标记接口列表?我已经读过(在一些Java书中)标记接口没有任何方法可以实现,但是当我进行谷歌搜索时 - 有一些答案指明标记接口确实可以有方法。如果是这种情况,那么我认为常规界面和标记界面之间没有区别 - 是否可以清除我的困惑:)

7 个答案:

答案 0 :(得分:5)

至少有一个:Serializable。我个人不记得别人了。 定义ta接口的技术很古老,几乎已经过时了,因为Java 1.5引入了注释,所以你可以使用注释来“标记”类而不是空接口。

答案 1 :(得分:5)

“标准”和“标记”界面之间确实没有技术差异。

通常,您定义一个接口来定义实现类应具有的方法。如果未指定任何方法,则将接口称为标记接口,因为如果仅将类标记为具有某些属性。

它的例子是SerializableCloneable等。这些接口本身并没有定义任何方法,但是按照惯例和规范,你必须选择实现一些与它们相关的特殊方法,例如:一些与Serializable相关的序列化方法。然后核心Java库将使用反射来检查在实现标记接口时是否存在这些方法。

答案 2 :(得分:4)

标记接口用作标记以通知消息到java编译器,以便它可以向实现它的类添加特殊行为,并且它们没有任何方法声明。

自从引入java注释功能以来,不再需要标记接口。 更好地使用比标记接口更强大的Java注释。

标记界面的一些示例:

  • java.lang.Cloneable
  • 的java.io.Serializable
  • java.rmi.Remote的
  • java.util.EventListener的

答案 3 :(得分:2)

SigleThreadModel也是标记界面 - (我知道它现在已被弃用,但仅举例来说我在这里提出它的名字)

详细了解here

答案 4 :(得分:2)

当一个接口被Java解释器提供为句柄以标记一个类,以便它可以在运行时为它提供特殊行为并且它们没有任何方法声明时,接口称为标记接口

Java Marker接口示例

java.lang.Cloneable
java.io.Serializable
java.util.EventListener

答案 5 :(得分:1)

我不知道标准Java api中有标记接口列表。我认为,维基百科文章"Marker interface pattern"中是否可以很好地解释标记接口是否可以指定方法。以下是直接解决您问题的摘录:

  

虽然典型的接口指定实现类必须支持的功能(以方法声明的形式),但标记接口不需要这样做。仅存在这样的接口表示实现类的特定行为。混合接口既可以作为标记并指定所需的方法,但如果使用不当可能会造成混淆。

除了文章中提到的Serializable接口之外,还有其他几个。我唯一能记住的是javax.security.auth.callback

想到另一个:javax.security.auth.login.Configuration.Parameters。我很确定还有更多。

答案 6 :(得分:0)

Java SE 8中的标记接口:

使用最广泛:

with open('test.txt', 'r') as f:
    numbers, words, decimals = zip(*(line.split() for line in f))

备注:EventListener官方称为“标记界面”。

其他:

java.lang.Cloneable
java.io.Serializable
java.util.RandomAccess
java.util.EventListener