泛型Puzzler

时间:2013-03-27 23:40:37

标签: java generics nested-generics

我正在试图弄清楚如何让泛型跳过篮球。

我有:

interface Root { }
interface Middle extends Root { }
class Type implements Root { }

许多“Subtype”类:

class Subtype1 extends Type implements Middle { }
class Subtype2 extends Type implements Middle { }
...

我想要的是声明一个包含两个类型参数TS的类,其中TType约束,而S受{ TMiddle

我无法看到使用泛型的方法来确保S扩展T并实现Middle。 我想要的是:

class Handler<T extends Root, S extends T, S extends Middle>;

class Handler<T extends Root, S extends <T extends Middle>>;

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

2 个答案:

答案 0 :(得分:2)

尝试引入一个扩展SubType并实现Middle的抽象类,因此其类型可以在Handler中使用。

abstract class MiddleSubtype extends Subtype implements Middle { }

然后,

class Handler<T extends Root, S extends MiddleSubtype> {  //...

编辑:在对问题进行更新后,同样的想法会是这样的:

abstract class MiddleType extends Type implements Middle { }

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

class Handler<T extends Root, S extends MiddleType> {  //...

答案 1 :(得分:0)

或者你可以自己制作S:

interface SInt<A,B> {}
class Handler<T extends Root, S extends SInt<T, Middle>>{}