泛型Puzzler

Nic*_*mer 8 java generics nested-generics

我试图弄清楚如何让泛型跳过篮球.

我有:

interface Root { }
interface Middle extends Root { }
class Type implements Root { }
Run Code Online (Sandbox Code Playgroud)

还有很多"Subtype"类:

class Subtype1 extends Type implements Middle { }
class Subtype2 extends Type implements Middle { }
...
Run Code Online (Sandbox Code Playgroud)

我要的是声明一个类有两个类型参数TS,在T被束缚TypeS被束缚TMiddle.

我无法看到泛型的方法来确保S扩展T和实现Middle.我想要的是:

class Handler<T extends Root, S extends T, S extends Middle>;
Run Code Online (Sandbox Code Playgroud)

要么

class Handler<T extends Root, S extends <T extends Middle>>;
Run Code Online (Sandbox Code Playgroud)

但当然两者都不合法.也许有一些我不知道的魔法?

rge*_*man 2

SubType尝试引入一个扩展和实现的抽象类Middle,以便其类型可以在Handler.

abstract class MiddleSubtype extends Subtype implements Middle { }
Run Code Online (Sandbox Code Playgroud)

然后,

class Handler<T extends Root, S extends MiddleSubtype> {  //...
Run Code Online (Sandbox Code Playgroud)

编辑:更新问题后,相同的想法将如下所示:

abstract class MiddleType extends Type implements Middle { }

class Subtype1 extends MiddleType { }
class Subtype2 extends MiddleType { }
...

class Handler<T extends Root, S extends MiddleType> {  //...
Run Code Online (Sandbox Code Playgroud)