8

我试图弄清楚如何让泛型跳过箍。

我有:

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

还有许多“子类型”类:

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

我想要的是声明一个具有两个类型参数Tand的类S,其中TTypeand绑定和S绑定。TMiddle

我看不到使用泛型来确保Sextends TAND implements的方法Middle。我想要的是这样的:

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

或者

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

但当然,两者都不合法。也许我缺少一些魔法?

4

2 回答 2

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> {  //...
于 2013-03-27T23:47:45.943 回答
0

或者您可以使 S 本身成为泛型:

interface SInt<A,B> {}
class Handler<T extends Root, S extends SInt<T, Middle>>{}
于 2014-01-06T12:45:20.877 回答