0

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

4

4 回答 4

1

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

没有。没有意义的空接口不是标记接口......在任何有用的意义上。标记接口必须对实现它的类表示一些有意义的东西。

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


@Sudheep Vallipoyil 在他的回答中说。

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

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

相比之下,以下是Wikipedia如何定义“标记接口”和相应的设计模式。

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

"为了使用这种模式,一个类实现一个标记接口(也称为标记接口),并且与该类的实例交互的方法测试接口的存在。而典型的接口指定功能(以方法声明的形式)实现类必须支持,标记接口不需要这样做。这种接口的存在表明了实现类的特定行为。混合接口,既充当标记又指定所需的方法,是可能的,但可能如果使用不当,会令人困惑。”

Joshua Bloch 的第二个定义说:

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

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

也可以看看:

于 2016-01-25T05:43:14.423 回答
0

乍一看,如果接口不包含任何成员,我们可以将其称为标记接口,它用于向 JVM 指示实现类的运行时行为。每个空接口都不是标记接口,因为

1)无法创建自定义标记界面

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

最好理解像使用标记接口的需要被使用 java 5 中的注释所取代。(通过这个你可以理解标记接口的含义)

于 2016-01-25T06:06:19.607 回答
0

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

1.问题不是什么是Marker接口模式。(就像问什么是迭代器,什么是迭代器模式)

2.wiki定义是针对“标记界面设计模式”而不是Java中的标记界面概念

3.从 Joshua 的 Effective java 你可以找到以下标记接口的定义

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

他还解释了为什么完整的空接口的 Set(collection frame work) 不是 Marker 接口。

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

于 2016-01-28T11:10:09.440 回答
-2

你的失误!!!我不知道你从哪里得到这些信息?从 java SE 7 Programmers Study Guide 中提到,“接口是一组公共方法,必须由使用接口的类实现。” 接口就是接口,如果它发生了变化,我应该在上面提到的这类书籍中阅读它。如果像 Cloneable 这样的接口没有公共方法,则意味着它没有公共方法,但任何实现它的类都必须将 Object.clone() 实现为公共方法。就是这个意思!!!请不要把这么简单的事情变成复杂的讨论,尤其是在面试时!

于 2018-04-30T18:39:05.943 回答