【问题标题】:Serializable interface in JavaJava中的可序列化接口
【发布时间】:2015-03-05 21:22:23
【问题描述】:

我了解拥有接口的全部意义在于强制实现它的类实现/定义该接口中的所有抽象方法。

但是,在Java中的Object Serialization(转换为字节流)的过程中,要序列化的对象作为实例的类必须实现Serializable接口。 但是,我没有看到正在定义接口的方法。 那么,是否有零方法的接口,如果是,甚至可能,如果再次是,如果它没有方法的目的是什么?

【问题讨论】:

标签: java


【解决方案1】:

Serializable 接口是一个标记接口。如果一个类实现了它,运行时系统就知道该类是可序列化的。

在现代 Java 中,这种效果现在可以通过注释来实现,但在定义此接口时它们还不存在。

【讨论】:

    【解决方案2】:

    是的,这样的接口是可能的。它被称为标记接口。还有其他类似的接口。

    你可以看看

    http://mrbool.com/what-is-marker-interface-in-java/28557

    【讨论】:

      【解决方案3】:

      正如我已经说过的,与 0 方法接口的目的是纯粹的合同。 让我在下一个例子中解释它:

      假设我们有一个由多个接口组成的简单数据访问层,例如:

      DeletableDao、InsertableDao、UpdatableDao 等以及 DaoImpl 等实现类:

      假设我们有这样的实体类:

      public Person implements DaoEntity {
          private int id;
          private String name;
      
          // getters and setters
      }
      

      其中 DaoEntity 是与 0 方法的接口,因为是纯契约:

      public DaoEntity {
      }
      

      假设我们的 DeletableDao 看起来像这样:

      public interface DeletableDao<T extends DaoEntity> {
          void delete(T t);
      }
      

      和实现类:

      public DaoImpl implements DeletableDao<Person> {
      
           public void delete(Person p) {
              // Delete person
          }
      }
      

      这一切意味着什么? DaoEntity 接口的用途是什么?这意味着只有DaoEntity子类的实例可以传递给delete方法并被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 2011-11-23
        • 2016-05-10
        相关资源
        最近更新 更多