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