我现在了解的一个空接口只有一个 
   interface Serializable{
   }
大家还知不知道有类似这样的接口名啊?象这样的空接口 有什么优点和缺点啊?

解决方案 »

  1.   

    空接口相当于一个标记。
    jdk1.5以后提供了annotation,就可以不再使用空接口了,除非为了向前兼容。
      

  2.   

    楼上正解。
    比如在Hibernate的API中,Session有get和load方法,其中要传的第二个参数是Serializable类型的(不是Object)。这个参数是用来放主键值的,可以放Integer,Long,String等等类型的对象,他们都实现了Serializable接口。这就是所谓的向前兼容。
    比如,EJB中的EnterpriseBean,它也是一个空接口。。
      

  3.   

    java.lang.Cloneable 也是一个标记接口。
      

  4.   

    在 J2SE 中好像就只有 Serializable 和 Cloneable 这两个。
      

  5.   

    我简单说说我在自己项目里的应用把。
    我的项目大概是个绘制类似流程图的东西(当时不知道GEF,重新发明了好多轮子)。所有元素都继承某个可绘制对象。但其中有子类可以移动,有些可以删除,有些可以再其上关联其他对象……所有这些特性我都用空的接口来标识,比如可移动的就实现movable接口,可删除的就实现deletable接口等等。我将对象创建后扔到编辑区,在相应输入事件时,比如要删除,那我就看选择的这个对象有是不是deletable的(用instanceof来判断),然后再进行相应操作,等等。
    其实真的实现比这要复杂些,但大概是这个意思
      

  6.   

    除了 Serializable、Cloneable 之外,无意之中我又发现一个:java.security.spec.KeySpec
      

  7.   

    空(标识)接口的重要性
      这是昨天我跟天意在一次闲聊中一次有起的讨论,标签接口真有那么重要吗?比如说很多初学者认为java.io.Serializable这样的接口,很多时候可用可不用,不用一样能执行对象系列化功能。
      为此,我们通过一个通俗而有趣的示例!这个示例是设计一个猎人,其持有一把智能猎枪,这就是说这把猎枪会自动识别人类,若发现瞄准的目标是人类,就不会开火,而其它的任何事物都通杀。
      为此,我们使用了下面三个接口: