8

ジェネリックをフープにジャンプさせる方法を見つけようとしています。

私は持っている:

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

そして多くの「サブタイプ」クラス:

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

私が望むのは、2 つの型パラメーター and を持つクラスを宣言TするSことです。TTypeSTMiddle

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 に答える