每个标记界面都是一个空接口。反之亦然?
发布于 2016-01-25 05:43:14
每个标记界面都是一个空接口。反之亦然?
不是的。没有意义的空接口不是标记接口.在任何有用的意义上。标记接口必须表示实现它的类的一些有意义的内容。
事实上,根据一些定义,(混合的)标记接口可以包含方法(参见下面的Wikipedia定义)。因此,标记接口不一定是空接口。
@Sudheep Vallipoyil在他的回答中说。
1)不可能创建用户定义的标记界面。
我不同意。这是基于“标记接口”的狭义定义,而这并不是普遍接受的定义。
相反,下面是维基百科如何定义“标记接口”和相应的设计模式。
标记接口模式是计算机科学中的一种设计模式,与提供有关对象的运行时类型信息的语言一起使用。它提供了一种将元数据与语言不明确支持此类元数据的类关联的方法。 “为了使用这种模式,类实现了一个标记接口(也称为标记接口),以及与该类的实例交互以确定接口是否存在的方法。虽然典型的接口指定实现类必须支持的功能(以方法声明的形式),但是标记接口的存在并不一定需要这样做。仅仅存在这样的接口就表示实现类的特定行为。混合接口作为标记并指定所需的方法是可能的,但如果使用不当,可能会造成混淆。”
约书亚·布洛赫的第二个定义是:
标记接口是一个接口,它不包含方法声明,但只是指定(或“标记”)一个实现该接口的类具有某些属性。
如您所见,在正常接受的用法中,“标记接口”一词并不是为JVM定义的接口保留的。任何人都可以定义一个。
另请参阅:
发布于 2016-01-25 06:06:19
首先,我们可以调用一个接口作为标记接口,如果它不包含任何成员,并且用于向JVM提供有关实现类的运行时行为的指示。每个空接口都不是标记接口,因为
1)不可能创建用户定义的标记界面。
2)您正在编写的空接口仍然可以扩展任何其他不为空的接口(即使是空接口也有一些继承的成员)。
更好的理解是,就像使用标记接口的需求被java 5中的注释所取代。(通过这个,您可以理解标记接口的含义)。
发布于 2016-01-28 11:10:09
这个答案是对@Stephen C对他的回答进行评论
1.问题不是什么是标记接口模式。(这就像问什么是迭代器和什么是迭代器模式)。
2. wiki定义的是java中的“标记接口设计模式”,而不是标记接口概念。
3.从约书亚的有效java中可以找到以下标记接口的定义
标记接口是一个接口,它不包含方法声明,但只是指定(或“标记”)一个实现该接口的类具有某些属性。
他还解释了为什么Set(集合框架工作),它完整的一个空接口不是一个标记接口。
我不认为答案应该是从wiki复制一些定义,并解释相同的(这也是不相关的!)
https://stackoverflow.com/questions/34985805
复制相似问题