1

我一直在考虑这个但不能马上放弃它,为什么我们甚至会在我们的类中实现标记接口,即使它们不包含任何方法。请告诉我

4

4 回答 4

3

举个例子:Serializable。

如果您尝试序列化一个对象,如果您的对象不是 Serializable 的实例,Java 序列化机制将抛出异常。为了使它成为 Serializable 的实例,对象的类因此必须实现 Serializable 接口,即使该接口不包含任何方法。就这样

o instanceof Serializable

是真的,而不是假的。

于 2014-01-24T08:12:50.887 回答
3

顾名思义,标记接口仅用于指示,它们标记实现该接口的类。

现在在您的代码中,您可以对其执行一些操作,例如(instance instanceof Marker)

在大多数地方注解都可以用于标记

例如,如果@Test在一个类上显示这个类是一个测试类并且应该被执行。同样可以通过接口来实现。

@Test //sort of marking
class ClassToTest{

}

或者

class ClassToTest implements Test{

}

上面的例子在他们试图实现的方式上是同义的。

为了在第一种情况下检查存在,您将尝试检查@Test注释的存在,在第二种情况下,您将进行instanceof检查。

使用标记接口,您还可以获得一个优势,即如果您存储所有 test 实例,那么您可以拥有一个类型安全的集合List<Test>,或者如果您想创建一个只接受的实例的类型安全方法Test

void method(Test testInstance){

}
于 2014-01-24T08:13:16.997 回答
0

对于调用者。就像:接口A,实现B。通常调用A。在spring框架中,它很熟悉

于 2014-01-24T08:12:32.360 回答
0

标记接口用作标记,将消息通知给 java 编译器,以便它可以向实现它的类添加特殊行为。

仔细查看 Java 中的标记接口,例如 Serializable、Clonnable 和 Remote,看起来它们用于向编译器或 JVM 指示某些内容。因此,如果 JVM 看到一个类是可序列化的,它会对它进行一些特殊的操作,类似地,如果 JVM 看到一个类是实现可克隆的,它会执行一些操作来支持克隆。

于 2014-01-24T08:12:59.943 回答