Я пытаюсь понять, как заставить дженерики прыгать через обручи.
У меня есть:
interface Root { }
interface Middle extends Root { }
class Type implements Root { }
И многие классы "Подтип":
class Subtype1 extends Type implements Middle { }
class Subtype2 extends Type implements Middle { }
...
Я хочу объявить класс с двумя параметрами типа T
и S
, где T
связан с Type
, а S
связан с T
и Middle
.
Я не вижу способа с помощью дженериков гарантировать, что S
расширяет T
И реализует Middle
. Я хочу что-то вроде:
class Handler<T extends Root, S extends T, S extends Middle>;
or
class Handler<T extends Root, S extends <T extends Middle>>;
Но, конечно, ни то, ни другое не является законным. Может быть, я упускаю какую-то магию?
Handler<T extends Root, S extends Subtype>
недостаточно? Единственная разница в том, чтоT
может быть более конкретным типом, чемS
, вот и все. - person Paul Bellora   schedule 28.03.2013Handler<T extends Root, S extends Subtype>
означает, что обработчик привязан к одному подтипу. У меня есть несколько, что означает, что обработчик больше не является общим для подтипов. На самом деле мой код имеет полдюжины подтипов, что означает равное количество обработчиков, привязанных к конкретному подтипу. - person Nick Palmer   schedule 28.03.2013