标记界面的目的是什么?


问题内容

我知道什么是标记接口-没有方法的接口。示例:可序列化,远程,可克隆。

我想知道标记界面的目的是什么。这是我的理解:

基本上只是从普通对象中识别特殊对象。像序列化的情况一样,需要序列化的对象必须实现可序列化的接口,并且线下的writeObject()方法必须检查某个地方是否为可序列化的实例。据我认为,那是writeObject使用接口serializable(标记接口)的唯一目的。对?还是jvm在可序列化接口的基础上也提供了一些额外的功能?

类似的逻辑对于可克隆接口也适用。

现在让我们看看它的用处。

可以说,在一个应用程序中,我们有1000个值对象。我们只想序列化100个特定对象。现在JDK已经说过程序员的角色只是用标记接口将对象标记为特殊,在这种情况下它是可序列化的接口。现在JDK会照顾要序列化的对象还是不该序列化的对象?

是的,我们可以使用某种bollean标志来实现这种行为。但这将是一个糟糕的方法。

类似地,我们可以说在用户定义的标记接口的情况下,我们可以借助标记接口来区分特殊对象。就像我们可以使用operator实例来确定它是否是该特定接口的实例。如果是,则在“否”的情况下继续处理,请抛出一些异常。

如果以上理解正确,请让?


问题答案:

您的理解是正确的。标记接口还定义了一种类型。因此可以在方法签名中使用它。例如,Hibernate的Session.get()方法采用Serializable作为参数。它避免传递无法序列化为参数的主键。

请注意,追溯地将Cloneable视为错误的设计选择。

如果实现序列化时存在可序列化,那么肯定可以通过注释实现。

标记接口在大多数情况下是一种反模式。接口应定义多态行为。标记界面可以由注释替换。