Я пытаюсь выяснить, как получить дженерики, чтобы прыгать через обручи.Generics Puzzler
у меня есть:
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>;
или
class Handler<T extends Root, S extends <T extends Middle>>;
Но, конечно, ни законны. Может быть, есть какая-то магия, которой я не хватает?
Вы не можете этого сделать. Вы можете иметь несколько границ, но они должны быть 0-1 класса плюс несколько интерфейсов. Вы не можете иметь общий тип в ситуации с несколькими связями. Я подозреваю, что это ограничение было сохранено, потому что разрешение типа в нескольких границах создавало бы большую сложность для проверки синтаксиса, поскольку это редкий случай. – BevynQ
related: http://stackoverflow.com/a/13261667/697449 –
Спасибо. Это тоже было мое чтение, но я понял, что возможно, что у меня что-то не хватает в спецификации. Бросает! –