我一直在考虑这个但是不能马上丢弃它,为什么即使它们不包含任何方法我们甚至会为我们的类实现Marker Interfaces。请让我知道
答案 0 :(得分:3)
我们举个例子:Serializable。
如果尝试序列化对象,如果您的对象不是Serializable的实例,则Java序列化机制将抛出异常。为了使它成为Serializable的一个实例,对象的类因此必须实现Serializable接口,即使该接口不包含任何方法。就这样
o instanceof Serializable
是真的,而不是假的。
答案 1 :(得分:3)
名称建议的标记接口仅用于指示,它们标记实现该接口的类。
现在,在您的代码中,您可以对其进行一些操作,例如(instance instanceof Marker)
在大多数地方注释可用于标记
例如,如果类上的@Test
显示此类是Test类并且应该执行。使用接口也可以实现同样的效果。
@Test //sort of marking
class ClassToTest{
}
或
class ClassToTest implements Test{
}
上述例子与他们试图实现的方式是同义词。
要检查第一种情况下的状态,您将尝试检查是否存在@Test
注释,在第二种情况下,您将进行instanceof
检查。
使用标记接口,您还可以获得一个优势,即如果存储了测试的所有实例,那么您可以拥有类型安全集合List<Test>
,或者如果您想创建一个只接受实例的类型安全方法Test
void method(Test testInstance){
}
答案 2 :(得分:0)
对于调用者。 就像:接口A,工具B. 通常是A被调用。在Spring框架中,它很熟悉
答案 3 :(得分:0)
标记接口用作标记,以便将消息通知给java编译器,以便它可以向实现它的类添加特殊行为。
仔细查看Java中的标记界面,例如Serializable,Clonnable和Remote看起来它们用于向编译器或JVM指示某些内容。因此,如果JVM看到Class是Serializable,它就会对它进行一些特殊操作,类似的方式如果JVM看到一个Class实现Clonnable它会执行一些操作来支持克隆。