标记接口的目的是什么?

2022-09-04 21:13:05

可能的重复项:
标记接口
标记接口的用途是什么?

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

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

基本上,它只是从普通对象中识别特殊对象。就像在序列化的情况下,需要序列化的对象必须实现可序列化的接口,并且向下写Object()方法必须在某个地方检查它是否是可序列化的实例。据我所知,这是写对象使用接口可序列化(标记接口)的唯一目的。右?或者jvm在可序列化接口的基础上也提供了一些额外的功能?

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

现在让我们看看它是如何有用的。

假设在应用程序中,我们有 1000 个值对象。我们只想序列化 100 个特定对象 。现在JDK已经说过,程序员的角色只是用标记接口将对象标记为特殊,在这种情况下,它的可序列化接口。现在,JDK 将负责序列化哪个对象?或者不序列化哪个对象?

是的,我们可以通过某种布尔旗帜来实现这种行为。但那将是一个糟糕的方法。

同样,我们可以说在用户定义的标记界面的情况下,我们可以借助标记界面来区分特殊对象。就像我们可以使用运算符的实例来确定它是否是该特定接口的实例一样。如果是,则在“否”的情况下继续抛出一些异常。

如果上述理解是正确的,请让?


答案 1

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

请注意,回顾过去,Cloneable被视为一个糟糕的设计选择。

可序列化当然可以使用注释实现,如果在实现序列化时存在这些注释。

大多数时候,标记界面是一种反模式。接口应定义多态行为。标记界面可以替换为注释。


答案 2