![]() |
1
65
在Java的早期版本中, Marker Interfaces 是声明类元数据的唯一方法。例如,Serializable Marker接口允许类的作者说,当序列化和反序列化时,他们的类将正常工作。 在现代Java中,标记接口没有位置。它们可以完全由 Annotations ,它允许非常灵活的元数据功能。如果您有关于类的信息,并且这些信息永远不会改变,那么注释是表示它的一种非常有用的方式。 |
|
2
93
就我个人而言,我想我会向约书亚在这个问题上的卓越知识低头。 |
![]() |
3
5
如果其他代码根据对象是否实现某个标记接口而做出决定,则此类标记接口非常有用。
就
现在注释是首选的,因为它们不会传播到子类。 |
![]() |
4
4
它表明类(以及所有非暂时字段)是序列化的候选对象。如果您正在构建一个依赖于序列化的框架,那么您当然可以这样编写一个方法:
限制你准备接受的课程。 因为序列化对象需要保持跨系统的兼容性,所以序列化是一个非常重要的任务 显式设计决策 因此需要使用标记接口来识别这些候选对象。 还有一个安全方面。你不想让所有东西都可以序列化,否则你可能会通过序列化意外地暴露(比如)密码或其他敏感数据。 |
![]() |
5
4
标记 接口。顾名思义,他们 做记号
有人讨论了它们是否应该被注释取代,因为它们的功能非常相似。 |
![]() |
6
3
如果您实现了一个接口,那么
|
![]() |
7
1
但是,标记接口在与反射结合使用时很有用:库/方法检查(通过反射)对象,如果其类实现标记接口,则其工作方式不同。对于Java5,几乎不需要标记接口——同样的“标记”功能可以通过Java注释实现——它们的大部分效果(同样)将通过基于反射的代码实现。 |
|
8
-2
仔细观察Java中的标记接口,例如可序列化、可克隆和远程,它们似乎是用来向编译器或JVM指示某些东西的。所以,若JVM看到一个类是可序列化的,它会对它执行一些特殊的操作,若JVM看到一个类是实现克隆的,它会执行一些操作来支持克隆。RMI和远程接口也是如此。所以,简而言之,标记接口向编译器或JVM发出指示、信号或命令。 http://javarevisited.blogspot.com/2012/01/what-is-marker-interfaces-in-java-and.html#ixzz2v6fIh1rw |
![]() |
9
-3
主要目的是告诉编译器对实现标记接口的类的对象有不同的处理方式。 |