Gur*_*lki 51 java annotations marker-interfaces
什么都没有在Serializable等标记接口中实现..实施它有什么用?
T C*_*T C 86
Joshua Bloch:Effective Java 2nd Edition,第179页
第37项:使用标记界面定义类型
...你可能会听到它说标记注释(第35项)使标记接口过时.这个断言是不正确的.标记接口与标记注释相比具有两个优点.首先,标记接口定义由标记类的实例实现的类型; 标记注释没有.这种类型的存在允许您在编译时捕获错误,如果您使用标记注释,则在运行时无法捕获这些错误....
我个人认为我会向约书亚在这个问题上的优秀知识屈服.
Chr*_*man 61
在早期版本的Java中,标记接口是声明类的元数据的唯一方法.例如,Serializable Marker Interface允许类的作者说序列化和反序列化时它们的类将正常运行.
在现代Java中,标记接口没有位置.它们可以完全被Annotations取代,这允许非常灵活的元数据功能.如果您有关于类的信息,并且该信息永远不会更改,那么注释是表示它的非常有用的方法.
它表明该类(以及因此所有非瞬态字段)是序列化的候选者。如果您正在构建依赖于序列化的框架,您当然可以这样编写一个方法:
public void registerObject(Serializable obj);
Run Code Online (Sandbox Code Playgroud)
限制您准备接受的课程。
由于序列化对象需要保持跨系统的兼容性,因此序列化是一个明确的设计决策,因此需要使用标记接口来识别此类候选者。
还有一个安全方面。您不想让所有内容都可序列化 - 否则您可能会通过序列化意外暴露(例如)密码或其他敏感数据。
它们被称为标记接口。顾名思义,它们标记某些对象可用于某些类型的操作。
Serializable例如,意味着该对象符合 java 序列化条件。
已经讨论过是否不应将它们替换为注释,因为它们的功能非常相似。