当前位置: 首页 > 面试题库 >

标记界面的目的是什么?

秋阳荣
2023-03-14
问题内容

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

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

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

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

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

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

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

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

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


问题答案:

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

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

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

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



 类似资料:
  • 我正在尝试创建我的第一个Spring Boot应用程序。我在这里使用的是: 然而,eclipse抱怨说: 没有为此构建指定目标。您必须以

  • 我正在弄清楚如何使用Cocoapods,我发现了这个:pod install在cocoapods版本1.0.0.beta.1中显示错误 它说我必须写以下行:后面跟一些东西。但我对什么是我的“TargetName”感到困惑。 例如,此项目中的目标名称是什么: 或者,我在哪里可以找到我的项目的“目标”?我正在使用最新版本的Xcode。

  • 既然c 17有了< code>std::byte,我就在寻找一种方法,将读取文件到< code>char的代码转换成读取文件到< code>byte的代码。文件包含字节,而不是一堆整数。 然后我读了这个问题和另一个问题,人们认为把文件读入<code>字节</code>是错误的,把文件读进<code<char>是正确的。 如果< code>byte不是为了访问内存而设计的,那么它的目的是什么呢?正如

  • 我目前正在将一些HTML标记映射到我的JSP文件中的Spring标记。Spring MVC有两个标记库:Spring.tld和spring-form.tld 我理解表单标记库中定义的标记的描述,因此我知道要将哪些HTML标记映射到Spring表单标记。但是,我完全不知道如何使用Spring标记库。定义的标签和给出的描述如下: null 我一点也不明白这些描述。转义、主题、JSTL、绑定、嵌套路径、

  • 问题内容: ECMAScript 2015规范在14.2.3中准确提及3次-1次关键字(或单词?) new.target : 通常,Contains不会在大多数函数形式中查找,但是,Contains用于检测 ArrowFunction中的new.target ,this和super用法。 在14.2.16中两次: ArrowFunction没有为参数,super,this或 new.target

  • 问题内容: 当在标记界面中没有什么要实现的东西时,实现它有什么用? 问题答案: 在Java的早期版本中,标记接口是声明有关类的元数据的唯一方法。例如,可序列化标记接口使类的作者可以说他们的类在进行序列化和反序列化时将表现正确。 在现代Java中,标记接口没有位置。它们可以完全由Annotations代替,从而具有非常灵活的元数据功能。如果你具有有关类的信息,并且该信息永不更改,则注释是表示它的非常