Интерфейс позволяет любой аргумент подкласса - PullRequest
0 голосов
/ 17 апреля 2019

Если у меня есть такие классы

class SuperType {}

class SubTypeOne extends SuperType {}

class SubTypeTwo extends SuperType {}

Я хочу создать такой интерфейс

interface TypeHandler {
  public void handle(SuperType arg);
}

Но допустим, чтобы они были действительной реализацией

class SubTypeOneHandler implements TypeHandler {
  public void handle(SubTypeOne arg) { }
}

Как вы можете видеть, используя подкласс типа аргумента, определенного в интерфейсе.

Я попытался переписать интерфейс, используя

interface TypeHandler {
  public void handle(? extends SuperType arg);
}

Но не похоже, что это действительно Java.

1 Ответ

3 голосов
/ 17 апреля 2019

Это принципиально небезопасно;если интерфейс объявлен как принимающий SuperType, вы должны иметь возможность вызывать любую реализацию с любым подклассом SuperType.

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

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