3 回答

TA贡献1803条经验 获得超6个赞
在Java的早期版本中,标记接口是声明有关类的元数据的唯一方法。例如,可序列化标记接口使类的作者可以说,他们的类在进行序列化和反序列化时将表现正确。
在现代Java中,标记接口没有位置。它们可以完全由Annotations代替,从而具有非常灵活的元数据功能。如果您具有有关类的信息,并且该信息永不改变,则注释是表示它的非常有用的方法。

TA贡献1824条经验 获得超8个赞
Joshua Bloch:有效的Java 2nd Edition,第179页
条目37:使用标记界面定义类型
...您可能会听到说标记注释(项目35)使标记接口过时的消息。该断言是不正确的。标记接口相对于标记注释具有两个优点。首先,标记器接口定义一种由标记的类的实例实现的类型。标记注释没有。这种类型的存在使您能够在编译时捕获直到使用运行时便无法捕获的错误,前提是您使用了标记批注...。
就我个人而言,我认为我将向约书亚(Joshua)在该主题上的丰富知识致敬。

TA贡献1851条经验 获得超5个赞
它表明该类(因此不是瞬态的所有字段)都是序列化的候选对象。而且,如果您要构建依赖于序列化的框架,那么您当然可以编写一种方法:
public void registerObject(Serializable obj);
限制您准备接受的课程。
因为序列化的对象需要保持跨系统的兼容性,所以序列化是一个明确的设计决策,因此需要使用标记接口来标识这些候选对象。
还有一个安全方面。您不想使所有内容都可序列化-否则您可能会意外地通过序列化公开(例如)密码或其他敏感数据。
添加回答
举报