Ограничение типа аргументов для переопределенного метода - PullRequest
0 голосов
/ 05 марта 2020

В моем приложении у меня есть набор объектов разных типов: скажем, A, B, C, D. Некоторые из этих объектов могут иметь " link " с другим объектом, означающим, что Например, объект A может владеть набором объектов типа B.

Я лично решил эту проблему, создав интерфейс:

public interface Linkable<T extends Item>{

   public link(List<T extends Item>);

} 

, чтобы объект, который может иметь ссылку с другими нужно реализовать этот интерфейс: скажем, A, B и C реализуют Linkable

Более того, я хочу ограничить тип объектов, которые могут быть связаны с некоторыми объектами. Например, я хочу, чтобы объекты типа A могли быть связаны только с объектами типа B и наоборот (ссылка всегда работает в обоих направлениях).

Моя идея заключалась в том, чтобы создать иерархию интерфейсов для того, чтобы разрешить только указывать c тип ссылок: скажем:

    ITEM
      |
------------
|          |
I1         I2     

A implements I1, I2
B implements I1
C implements I2

Моя цель в качестве примера состоит в том, что экземпляры B могут быть связаны только с экземплярами A, в то время как экземпляры C не могут быть связаны с экземплярами Б.

Я лично вижу некоторые дыры в этом дизайне. На самом деле, я думаю, что есть необходимость в дополнительных ограничениях, которые я не рассматриваю. Когда я переопределю метод Linkable::link в классах A, B, C, он должен будет принимать подтипы Item, поэтому в случае C я смогу добавить ссылку на экземпляры B просто потому, что I1 и I2 являются подтипами ITEM.

Более того, я чувствую, что тип Item должен быть ограничен теми, кто реализует интерфейс Linkable.

Как я могу ограничить типы во время переопределения? Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...