Общий класс Java, связанный с расширением типа T <E> - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть общий тестовый класс, который является общим для типа коллекции (в моем случае это стек), которую он тестирует.

Пусть имя универсального типа будет S (для стека). У меня есть интерфейс IStack<E>, и я хочу требовать S для реализации IStack<E>. Когда я объявляю свой класс как class Test<S extends IStack> { ... }, Я получаю предупреждение:

IStack является необработанным типом, References ... должен быть параметризован.

class Test<S<E> extends IStack<E>> приводит к синтаксической ошибке

Синтаксическая ошибка на токене '<', ожидаемая </p>

Как правильно объявлять такого рода ограничения в Java?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

class Test<S extends IStack> использует необработанный тип из IStack, во время компиляции нет информации о том, что находится внутри IStack.

Вы можете сделать несколько вещей, это полностью зависит от вашего дизайна:

  • class Test<S extends IStack<?>>, чтобы учесть любой тип элемента в IStack
  • class Test<E, S extends IStack<E>> для привязки IStack к определенному E типу элемента
  • class Test<S extends IStack<S>>, чтобы запутать всех
0 голосов
/ 05 ноября 2018

Я думаю, вам нужны два общих параметра, один для элемента, другой для типа стека, т.е.

class Test<E,S extends IStack<E>>

(или E extends SomeAncestorOfYourElements при необходимости)

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