java中的标记界面

可以在java中编写我们自己的标记接口吗? 我正在写一个类似的代码

public interface MyMarker{ } 

那是一个标记界面吗?

如果有可能那么我如何理解JVM这个界面是我自己创建的标记界面?

是的,这是一个标记界面。 您将测试对象是否“实现”它简单如下:

 if (x instanceof MyMarker) 

对于您想要的特定 (而不是对象)

 if (MyMarker.isAssignableFrom(otherClass)) 

您应该考虑使用注释而不是标记接口。 它们并不总是直接替代,但在许多情况下它们用于相同的目标,而注释(IMO)更清洁。

我们不能说没有任何方法的接口是标记接口。 因为“标记”这个词本身就表示“标记某物”的含义。 所以我说,接口(无论可能是它的内容)通过实现,如果一个类获得一些额外的或专门的行为,如允许对象存储到持久性存储(Serializable)或允许一个对象使其重复或raplica(可克隆)或允许用户只实现一个方法(如run()),而不是在线程编程(Runnable)中的子类中实现近4个t0 5方法。

这些是当一个对象实现那些只被称为MARKER INTERFACE的接口时可以获得的特殊行为。

结论

标记界面可能包含也可能不包含方法……

它也可以称为标记接口,虚拟接口,空接口….

  1. “通常”标记接口用于向处理“标记类型”对象时可能需要的附加元数据的编译或JVM发送信号。

  2. 例如,如果一个类使用java.io.Serializable接口,则编译实际上会为该类的标记接口生成实现代码,该类在运行时由JVM在存储/编组该对象时需要。

  3. 所以我没有看到自定义标记接口的任何实际效用(因为它对于在java中的一组有限标记接口上工作的编译器/ JVM并不意味着什么)

实现接口的类获得了一些特殊的质量,接口称为标记或标记接口。

例如:类实现Runnable接口,该类充当Thread。 所以它被称为标记接口。

  A class implements java.io.Serializable interface that clsass act to send object class which is needed at run time by JVM while storing/marshaling that object. A Class implements java.lang.Clonable interface that object ready to cloning. so java.lang.Clonabel interface is called Marker or Taged interface. 

有些人相信所有空接口都是Marker Interfaces。 但这不是正确的。

因为我们采用java.lang.Runnable接口,所以它不是Empty接口,它包含名为void run()的方法。

在java API中,所有Marker Interfafes都是空的,就像java.io.Serializable一样。

一些Marker接口或不像java.lang.Runnable那样是空的。