iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Java Marker Interface是什么
  • 798
分享到

Java Marker Interface是什么

2023-06-02 22:06:58 798人浏览 八月长安
摘要

这篇文章给大家介绍Java Marker Interface是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法。在Ja

这篇文章给大家介绍Java Marker Interface是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法。在Java里很容易找到标记接口的例子,比如jdk里的Serializable接口就是一个标记接口。

Java Marker Interface是什么

首先明确一点,Marker Interface(标记接口)决不是Java这门编程语言特有的,而是计算机科学中一种通用的设计理念。

我们看Wikipedia里对标记接口的定义。

“The tag/ marker interface pattern is a design pattern in computer science, used with languages that provide run-time type infORMation about objects. It provides a means to associate metadata with a class where the language does not have explicit support for such metadata.“

我试了下Google Translate翻译上面这段话,翻得很差劲,所以我来解释一下。

标记接口是计算机科学中的一种设计思路。编程语言本身不支持为类维护元数据。而标记接口则弥补了这个功能上的缺失——一个类实现某个没有任何方法的标记接口,实际上标记接口从某种意义上说就成为了这个类的元数据之一。运行时,通过编程语言的反射机制,我们就可以在代码里拿到这种元数据。

以Serializable接口为例。一个类实现了这个接口,说明它可以被序列化。因此,我们实际上通过Serializable这个接口,给该类标记了“可被序列化”的元数据,打上了“可被序列化”的标签。这也是标记/标签接口名字的由来。

下面的代码是我从JDK源代码中摘出来的:

if (obj instanceof String) {    writeString((String) obj, unshared);} else if (cl.isArray()) {    writeArray(obj, desc, unshared);} else if (obj instanceof Enum) {    writeEnum((Enum) obj, desc, unshared);} else if (obj instanceof Serializable) {    writeOrdinaryObject(obj, desc, unshared);} else {    if (extendedDebugInfo) {        throw new NotSerializableException(cl.getName() + " "        + debugInfoStack.toString());    } else {        throw new NotSerializableException(cl.getName());    }}

Java里的序列化,字符串数组,枚举类和普通类是分别进行的。如果当前待序列化的变量既不是字符串,也不是数组和枚举类,那么就检测该类是否实现了Serializable的接口,大家注意下图第1177行就执行了这种检测。如果没有实现Serializable接口,就会抛出异常NotSerializableException。

Java Marker Interface是什么

大家也许会问,在spring里满天飞的注解(Annotation)不是最好的用来维护元数据的方式么?确实,Annotation能声明在Java包、类、字段、方法、局部变量、方法参数等的前面用于维护元数据的目的,既灵活又方便。然而这么好的东西,只有在JDK1.5之后才能用。JDK1.5之前维护元数据的重任就落在标记接口上了。

大家看另一个标记接口,Cloneable。下图第51行清晰标注了该接口从JDK1.0起就有了。

Java Marker Interface是什么

JDK源代码里的Clone方法的注释也清晰注明了,如果一个类没有实现Cloneable接口,在执行clone方法时会抛出CloneNotSupportedException异常。

Java Marker Interface是什么

关于Java Marker Interface是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java Marker Interface是什么

本文链接: https://www.lsjlt.com/news/231502.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Marker Interface是什么
    这篇文章给大家介绍Java Marker Interface是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法。在Ja...
    99+
    2023-06-02
  • SQL中Interface指的是什么
    这篇文章主要介绍了SQL中Interface指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL Interface指的是SQL接...
    99+
    2024-04-02
  • golang interface的作用是什么
    Go语言中的接口(interface)是一种抽象类型,它定义了一组方法的集合。接口定义了对象的行为和功能,而不关心对象的具体实现。 ...
    99+
    2023-10-20
    golang
  • abstract class和interface的本质是什么
    本篇内容介绍了“abstract class和interface的本质是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们知道abstr...
    99+
    2023-06-17
  • Golang中interface{}的注意事项是什么
    这篇“Golang中interface{}的注意事项是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang中int...
    99+
    2023-07-05
  • abstract class和interface的区别是什么
    本文小编为大家详细介绍“abstract class和interface的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“abstract class和interface的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-03
  • Go中interface{}的注意事项是什么
    这篇文章主要介绍“Go中interface{}的注意事项是什么”,在日常操作中,相信很多人在Go中interface{}的注意事项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go中interface{...
    99+
    2023-07-05
  • php中interface有什么用
    这篇文章主要介绍php中interface有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php中的类是不允许多继承的,而接口可以多继承,其次使用接口可以封装具体的实现,不向外部暴露具体的实现细节,只将接口暴露...
    99+
    2023-06-09
  • TypeScript中interface和type间的区别是什么
    这篇文章主要介绍“TypeScript中interface和type间的区别是什么”,在日常操作中,相信很多人在TypeScript中interface和type间的区别是什么问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • interface在java中怎么使用
    在Java中,可以使用关键字"interface"来定义一个接口。接口是一种抽象类型,它只定义了方法的签名和常量的声明,而没有具体实...
    99+
    2023-08-31
    Java interface
  • 怎么使用Java中的abstract和interface
    本篇内容介绍了“怎么使用Java中的abstract和interface”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、简介abstrac...
    99+
    2023-06-25
  • Typescript中interface与type的相同点与不同点是什么
    今天小编给大家分享一下Typescript中interface与type的相同点与不同点是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-04
  • abstract class和interface有什么不同
    这篇文章主要讲解了“abstract class和interface有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“abstract class和interface有什么不同”吧!我...
    99+
    2023-06-17
  • Java Path是什么
    这篇文章主要介绍了Java Path是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java Path是什么文章都会有所收获,下面我们一起来看看吧。通常,我们需要设置三个环境变量:Java_HOME、PAT...
    99+
    2023-06-03
  • java vm是什么
    Java虚拟机(Java Virtual Machine,简称JVM)是一种可以在不同平台上运行Java程序的虚拟机。它是Java编...
    99+
    2023-08-22
    Java
  • Java Synchronized是什么
    本篇内容介绍了“Java Synchronized是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Synchronized是什...
    99+
    2023-07-05
  • Java swing是什么
    这篇文章主要介绍“Java swing是什么”,在日常操作中,相信很多人在Java swing是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java swing是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • Java MANIFEST.MF是什么
    Java MANIFEST.MF是一个包含在JAR文件中的特殊文件,用于描述JAR文件的元数据信息。它是Java Archive(J...
    99+
    2023-09-13
    Java
  • Java是什么 (转)
    Java是什么 (转)[@more@]简言之,Java环境可用来开发能在任何计算平台上运行的应用软件。它实际上是一种非常基本且结构紧凑的技术,而它对WorldWideweb以及商业的总体影响已可同电子表格对PC机的影响相比拟。 Java是巨...
    99+
    2023-06-03
  • java private是什么
    在Java中,private是一种访问修饰符,用于限制类中的成员(字段、方法、嵌套类)的访问范围。当一个成员被声明为private时...
    99+
    2023-08-28
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作