2015-03-05 7 views
1

Я понимаю, что вся суть наличия интерфейса заключается в том, чтобы заставить класс, который его реализует, реализовать/определить все абстрактные методы в этом интерфейсе.Интерфейс Serializable в Java

Однако в процессе сериализации объектов в Java (преобразование в поток байтов) класс, который должен быть сериализован, представляет собой экземпляр должен реализовывать интерфейс Serializable. Однако я не вижу методов определения интерфейса. Итак, что такое интерфейс с методами ZERO, если да, это возможно и если да, то в чем цель, если у него нет методов?

+2

Pure contract ... –

+0

Да, это интерфейс без каких-либо методов или констант. –

+0

Прочтите это для объяснения: http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html (Возможно, вам нужно будет что-то сделать, если ваш класс требует специальной обработки, а на этих страницах говорит вам что.) –

ответ

2

Интерфейс Serializable - это интерфейс маркера. Если класс реализует его, система выполнения знает, что класс сериализуем.

В современной Java этот эффект теперь может быть достигнут с помощью аннотации, но они не были в то время, когда был определен этот интерфейс.

0

Как я уже говорил, цель интерфейса с 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 и удален.