@TiTreivan
Самозванец

Зачем нужен второй интерфейс в определении класса, если первый интерфейс — наследник второго?

Ситуация следующая:
Класс
public final class NodeRef implements EntityRef, Serializable {...}


Интерфейс1
public interface EntityRef extends Serializable{}

Второй интерфейс я надеюсь в представлении не нуждается

Вопрос: Зачем прописывать Serializable если он и так наследуется EntityRef?

У меня только одно предположение - для удобства разработки, чтобы было сразу видно что объект можно сериализовать и наоборот. Но мне кажется что я что-то упускаю, как-то странна на мой взгляд такая конструкция.

Код из открытой ~CRM/framework. Ссылки на классы:
https://github.com/Alfresco/alfresco-community-rep...
https://github.com/Alfresco/alfresco-community-rep...
  • Вопрос задан
  • 407 просмотров
Решения вопроса 1
Jacen11
@Jacen11
для удобства программиста, чтобы он сразу видел что NodeRef является Serializable и не нужно было куда то проваливаться. В плане исполнения кода ни на что не влияет. Можно и убрать спокойно, чисто личные предпочтения
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Dementor
программист, архитектор, аналитик
Очень многие вещи в ИТ и не только можно описать фразой "так исторически сложилось".
Возможно сначала накинули интерфейсы, а потом сделали наследование интерфейсов. Или завтыкали...
Ответ написан
Комментировать
neuotq
@neuotq
Прокрастинация
Serializable много может быть разных ещё, и чтобы не плодить классы для некоторых проверок используют маркер интерфейсы, которые с одной стороны не навредят, а другой стороны сократят код и позволят сделать проверки типов где нужно для различных операций при всяких там наследованиях. Погуглите Marker Interfaces

Там прямо в комментах написано:
/**
 * A marker interface for entity reference classes.
 * <p>
 * This is used primarily as a means of ensuring type safety in collections
 * of mixed type references.
 * 
 * @see org.alfresco.service.cmr.repository.NodeService#removeChild(NodeRef, NodeRef)
 * 
 * @author Derek Hulley
 */
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
Потому что объект не будет считаться поддерживаемым родительский интерфейс одного из интерфейсов.

Т.е. если объекту не указать Serializable и спросить, поддерживает ли он Serializable, то он скажет, что нет. Потому что он поддерживает только EntityRef, а не Serializable.

Не знаю точно как в PHP, но так работает в некоторых языках. Т.е. наследование интерфейсов - это просто упрощение перечисления определений интерфейса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы