【发布时间】:2011-05-31 06:16:30
【问题描述】:
我知道什么是标记界面以及何时需要使用它。一个问题我还不清楚。如果标记接口没有任何方法或主体,它在运行时如何工作?
【问题讨论】:
我知道什么是标记界面以及何时需要使用它。一个问题我还不清楚。如果标记接口没有任何方法或主体,它在运行时如何工作?
【问题讨论】:
标记界面不能像这样“工作”。顾名思义,它只是将一个类标记为特定类型。其他一些代码必须检查标记的存在并根据该信息执行某些操作。
如今,注释通常扮演与标记界面以前相同的角色。
【讨论】:
"Some other code has to check for the existence of the marker and do something based on that information.".,您能否提供一个相同的示例/场景,
Cloneable 或Serializable 的讨论具有误导性,因为实际的克隆和序列化机制并不真正依赖于标记接口用于指示哪些类可以被克隆或序列化这一事实。
你可以用它做的唯一有用的事情是
if (instance instanceof MyMarkerInterface) {
...
}
【讨论】:
标记接口在很多地方都可以用注释代替,但是标记接口仍然可以用于
编译时检查。您可以有一个方法,该方法必须采用具有给定标记接口的类的对象,例如
public void myMethod(MyMarkerInterface MMI);
您不能单独使用注释进行此编译时检查。
顺便说一句:你可以有两个使用泛型的接口,但是好的例子很少。
编辑:我将它用于侦听器标记界面。侦听器具有标有注释的方法方法,但方法可以具有任何名称或类型。它将编译器时间检查添加到纯运行时链接。
public Component implements Listener {
@ListenerCallback
public void onEventOne(EventOne... eventOneBatch) { }
@ListenerCallback
public void onEventTwo(EventTwo eventTwo) { }
}
【讨论】:
myMethod 或多或少没用,因为没有比Object 更多方法的marker 接口可以做什么?
java.lang.Cloneable 和 java.util.RandomAccess 的文档中的“好”示例(good,如 在引入注释之前我已经这样做了)。
public Object clone() 方法。
Cloneable 声明了这样一个方法,那么如果请求了浅拷贝,那么一个类如何从自动克隆中受益呢?我将投票从Cloneable 更改为java.rmi.Remote。
Java中的标记接口是没有字段或方法的接口,或者简单地说Java中的空接口称为标记接口。例如可序列化、可克隆和远程接口。它们用于向编译器或 JVM 指示信号或命令。它也可以用来对代码进行分类。您还可以编写自己的标记接口,并使用它们在逻辑上划分您的代码。此外,您可以在这些类上编写任何预处理操作。
【讨论】:
标记接口告诉JVM,被标记接口标记的类添加标记接口的功能。就像实现 Cloneable 告诉 JVM 这个类实现了 Cloneable 一样,因此 JVM 必须逐位复制它。
【讨论】: