代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

Java中标记接口的用途是什么?

  •  44
  • GuruKulki  · 技术社区  · 15 年前

    当标记器接口中没有任何要实现的内容时,例如 Serializable 实施它有什么用?

    9 回复  |  直到 5 年前
        1
  •  65
  •   Nikola Yovchev    11 年前

    在Java的早期版本中, Marker Interfaces 是声明类元数据的唯一方法。例如,Serializable Marker接口允许类的作者说,当序列化和反序列化时,他们的类将正常工作。

    在现代Java中,标记接口没有位置。它们可以完全由 Annotations ,它允许非常灵活的元数据功能。如果您有关于类的信息,并且这些信息永远不会改变,那么注释是表示它的一种非常有用的方式。

        2
  •  93
  •   T C    14 年前

    第37项:使用标记接口定义类型

    ... 注释(项目35)作标记 接口过时了。这一断言是正确的 不对。标记接口有两个 优于标记注释。 首先也是最重要的是,标记接口 标记类的实例;标记 此类型允许您捕获错误 在编译时,您无法 如果使用了 标记注释。。。。

    就我个人而言,我想我会向约书亚在这个问题上的卓越知识低头。

        3
  •  5
  •   Gregory Pakosz    15 年前

    如果其他代码根据对象是否实现某个标记接口而做出决定,则此类标记接口非常有用。

    Serializable ,反射将用于序列化对象的字段。

    现在注释是首选的,因为它们不会传播到子类。

    Marker interface pattern

        4
  •  4
  •   Brian Agnew    15 年前

    它表明类(以及所有非暂时字段)是序列化的候选对象。如果您正在构建一个依赖于序列化的框架,那么您当然可以这样编写一个方法:

    public void registerObject(Serializable obj);
    

    限制你准备接受的课程。

    因为序列化对象需要保持跨系统的兼容性,所以序列化是一个非常重要的任务 显式设计决策 因此需要使用标记接口来识别这些候选对象。

    还有一个安全方面。你不想让所有东西都可以序列化,否则你可能会通过序列化意外地暴露(比如)密码或其他敏感数据。

        5
  •  4
  •   R. Martinho Fernandes    15 年前

    标记 接口。顾名思义,他们 做记号

    Serializable 例如,表示对象符合java序列化的条件。

    有人讨论了它们是否应该被注释取代,因为它们的功能非常相似。

        6
  •  3
  •   cyborg    15 年前

    如果您实现了一个接口,那么 instanceof 这是真的。如果您的接口没有什么要实现的,那么您可以使用它来用元数据标记一个类,就像Java 1.5及更高版本的注释一样,而不必强制实现者做任何特殊的事情。

        7
  •  1
  •   Itay Maman    15 年前

    但是,标记接口在与反射结合使用时很有用:库/方法检查(通过反射)对象,如果其类实现标记接口,则其工作方式不同。对于Java5,几乎不需要标记接口——同样的“标记”功能可以通过Java注释实现——它们的大部分效果(同样)将通过基于反射的代码实现。

        8
  •  -2
  •   user3293519    11 年前

    仔细观察Java中的标记接口,例如可序列化、可克隆和远程,它们似乎是用来向编译器或JVM指示某些东西的。所以,若JVM看到一个类是可序列化的,它会对它执行一些特殊的操作,若JVM看到一个类是实现克隆的,它会执行一些操作来支持克隆。RMI和远程接口也是如此。所以,简而言之,标记接口向编译器或JVM发出指示、信号或命令。

    http://javarevisited.blogspot.com/2012/01/what-is-marker-interfaces-in-java-and.html#ixzz2v6fIh1rw

        9
  •  -3
  •   Chanikag    12 年前

    主要目的是告诉编译器对实现标记接口的类的对象有不同的处理方式。

    推荐文章