Marker接口和空接口之间的区别?

时间:2016-01-25 05:39:03

标签: java interface marker-interfaces

每个Marker界面都是一个空接口。反之亦然吗?

4 个答案:

答案 0 :(得分:1)

  

每个Marker界面都是一个空接口。反之亦然吗?

不。没有意义的空接口不是标记接口......在任何有用的意义上。标记接口必须表示关于实现它的类的有意义的

事实上,根据一些定义,(混合)标记接口可以包含方法(参见下面的维基百科定义)。因此,标记接口必然是一个空接口。

@Sudheep Vallipoyil在回答中说。

  

1)无法创建用户定义的标记界面。

我不同意。这是基于“标记界面”的狭义定义,这不是普遍接受的定义。

相比之下,Wikipedia定义了“标记界面”和相应的设计模式。

  

“标记接口模式是计算机科学中的一种设计模式,与提供有关对象的运行时类型信息的语言一起使用。它提供了一种将元数据与语言无法明确支持此类元数据的类相关联的方法。 。“

     

要使用此模式,类实现标记接口(也称为标记接口),并且与该类的实例交互的方法测试接口是否存在。而典型接口指定功能(在实现类必须支持的方法声明的形式,标记接口不需要这样做。仅仅存在这样的接口表示实现类的特定行为。混合接口,它们都充当标记和指定所需的方法是可能的,但如果使用不当可能会造成混淆。“

Joshua Bloch的第二个定义是:

  

“标记接口是一个不包含方法声明的接口,但只是指定(或”标记“)一个实现接口具有某些属性的类。”

如您所见,在正常接受的用法中,术语“标记接口”不是为JVM定义的接口保留的。任何人都可以定义一个。

另见:

答案 1 :(得分:0)

在第一次拍摄时,如果它不包含任何成员,我们可以将接口称为标记接口,并且它用于向JVM提供有关实现类的运行时行为的指示。 每个空接口都不是

的标记接口

1)无法创建用户定义的标记接口

2)您正在编写的空接口仍然可以扩展任何其他非空的接口(即使是空接口也有一些继承的成员)。

最好理解为使用标记接口的需要被替换为使用java 5中的注释。(通过这种方式,您可以理解标记接口的含义)

答案 2 :(得分:0)

这个答案是评论@Stephen C的回答

1.问题不在于什么是Marker接口模式。(这就像问什么是迭代器以及什么是迭代器模式)

2.维基定义用于'标记界面设计模式'不适用于java中的标记接口概念

3.来自Joshua的有效java,你可以找到marker接口的以下定义

"标记接口是一个不包含方法声明的接口,但只是指定(或#34;标记")一个实现接口具有某些属性的类。"

他还解释了为什么Set(集合框架工作)完整的空接口不是Marker接口。

我认为答案应该是从维基中复制一些定义并解释相同的内容(也是不相关的定义!)

答案 3 :(得分:-2)

你错了!我不知道你在哪里获得这些信息?从java SE 7程序员学习指南中提到“接口是必须由使用该接口的类实现的公共方法集。”接口是一个接口,如果它已经改变,我应该在这种类型的书中提到这一点以上。如果像Cloneable这样的接口没有公共方法,则表示它没有公共方法,但任何实现它的类必须将Object.clone()实现为public。这就是它的意思!请不要在复杂的讨论中做出如此简单的事情,特别是在面试时!