java 标识接口的作用_注解-Java中标记接口的用途是什么?

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

当标记接口(如Serializable)中没有实现的对象时。 。 实施它有什么用?

9个解决方案

85 votes

Joshua Bloch:有效的Java 2nd Edition,第179页

条目37:使用标记界面定义类型

...   您可能会听到说标记   注释(项目35)做标记   接口已过时。 这个断言是   不正确 标记接口有两个   相对于标记注释的优势。   首先,标记界面   定义由以下对象实现的类型   标记类的实例; 记号笔   注释没有。 存在的   这种类型可以让您捕获错误   在编译时,您无法   直到运行时才捕获   标记注释...

就我个人而言,我认为我将向约书亚(Joshua)在该主题上的丰富知识致敬。

T C answered 2020-01-17T22:59:21Z

61 votes

在Java的早期版本中,标记接口是声明有关类的元数据的唯一方法。 例如,可序列化标记接口使类的作者可以说,他们的类在进行序列化和反序列化时将表现正确。

在现代Java中,标记接口没有位置。 注释可以完全替换它们,从而提供非常灵活的元数据功能。 如果您具有有关类的信息,并且该信息永不更改,则注释是表示它的非常有用的方法。

Chris Pitman answered 2020-01-17T22:58:47Z

6 votes

在其他代码根据对象是否实现某些标记接口进行决策的情况下,此类标记接口很有用。

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

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

请参见标记器界面模式。

Gregory Pakosz answered 2020-01-17T22:59:55Z

4 votes

它表明该类(因此不是瞬态的所有字段)是序列化的候选对象。 而且,如果您要构建依赖于序列化的框架,则当然可以这样编写一种方法:

public void registerObject(Serializable obj);

限制您准备接受的课程。

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

还有一个安全方面。 您不想使所有内容都可序列化-否则您可能会意外地通过序列化公开(例如)密码或其他敏感数据。

Brian Agnew answered 2020-01-17T23:00:28Z

3 votes

如果实现接口,则instanceof为true。 如果您的接口没有什么可实现的,则可以使用它来标记带有元数据的类,例如Java 1.5及更高版本的注释,而不必强制实现者执行任何特殊操作。

cyborg answered 2020-01-17T23:00:49Z

3 votes

它们称为标记器接口。 顾名思义,它们标记某些对象可用于某些类型的操作。

Serializable表示该对象符合Java序列化的条件。

由于它们的功能非常相似,因此已经讨论了是否不应该将它们替换为注释。

Bozho answered 2020-01-17T23:01:18Z

1 votes

您的推理是正确的,一个空接口不会影响基于字段检查/更改和方法分派的程序的“标准”执行。

但是,将标记接口与反射结合使用时非常有用:库/方法(通过反射)检查对象,并且如果其类占用标记接口,则工作方式会有所不同。 从Java5开始,几乎不需要标记接口-通过Java注释可以实现相同的“标记”功能-(再次)它们的大部分效果将通过基于反射的代码来实现。

Itay Maman answered 2020-01-17T23:01:43Z

-2 votes

仔细查看Java中的标记接口,例如 可序列化,可克隆和远程,看起来它们用于指示编译器或JVM。 因此,如果JVM看到某个类可序列化,则它对它执行了一些特殊的操作;如果JVM看到一个类实现了Clonnable,则它执行了一些操作来支持克隆。 RMI和远程接口也是如此。 因此,简而言之,Marker接口向Compiler或JVM指示,发出信号或发出命令。

阅读更多:[http://javarevisited.blogspot.com/2012/01/what-is-marker-interfaces-in-java-and.html#ixzz2v6fIh1rw]

user3293519 answered 2020-01-17T23:02:08Z

-3 votes

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

Chanikag answered 2020-01-17T23:02:28Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值