# 1 楼答案 因为有时候,如果某个类型的某个属性可以用作类型本身,那么它确实是有意义的。如果我用这样的方法: public void save(Object data){ ... } 。。。你真的不知道data将如何保存。虚拟机序列化?Bean属性序列化?一些自制的计划?如果你这样写: public void save(Serializable data){ ... } 。。。这很清楚(如果ObjectOutputStream的设计师使用了这种可能性就好了!)。有时,当您想向类型添加元数据时,使用注释是有意义的,但在这种情况下,我主张使用标记接口
# 2 楼答案 除了其他答案之外,标记接口还可以用于指定类的其他属性,这些属性不是由其他一些已经实现的接口继承的。其中一个例子是接口RandomAccess。它表示可以在不损失性能的情况下随机访问的集合,并且不必通过迭代器访问以实现该性能
# 5 楼答案 你可以用一个标记接口来标记你的类,告诉你的同类开发者和使用者你明确地支持这个功能。想想可序列化;需要持久化会话并使用序列化的人可以安全地使用类的对象 它可以进一步用于反射;如今,使用注释来实现这一点是很常见的,但在过去,你可以检查一个类,检查它是否实现了某个接口(比如DAO),如果实现了,则进一步处理对象(我在这里考虑实体注释)
# 1 楼答案
因为有时候,如果某个类型的某个属性可以用作类型本身,那么它确实是有意义的。如果我用这样的方法:
。。。你真的不知道
data
将如何保存。虚拟机序列化?Bean属性序列化?一些自制的计划?如果你这样写:。。。这很清楚(如果
ObjectOutputStream
的设计师使用了这种可能性就好了!)。有时,当您想向类型添加元数据时,使用注释是有意义的,但在这种情况下,我主张使用标记接口# 2 楼答案
除了其他答案之外,标记接口还可以用于指定类的其他属性,这些属性不是由其他一些已经实现的接口继承的。其中一个例子是接口RandomAccess。它表示可以在不损失性能的情况下随机访问的集合,并且不必通过迭代器访问以实现该性能
# 3 楼答案
标记接口通常有一些与之相关的魔力:要么直接内置到VM中,要么使用反射。因为魔法在技术上可以应用于任何类,所以你可以使用标签来表示你对魔法的想法很好,以及它是否适用于你的类
# 4 楼答案
它用于提到类的某些属性(比如Serializable shows,该类可以序列化)。现在注释可以完成这项工作
# 5 楼答案
你可以用一个标记接口来标记你的类,告诉你的同类开发者和使用者你明确地支持这个功能。想想可序列化;需要持久化会话并使用序列化的人可以安全地使用类的对象
它可以进一步用于反射;如今,使用注释来实现这一点是很常见的,但在过去,你可以检查一个类,检查它是否实现了某个接口(比如DAO),如果实现了,则进一步处理对象(我在这里考虑实体注释)
# 6 楼答案
Bloch的“有效Java”中讨论了标记接口与注释的问题,该部分内容可在google books here上找到