私は、ジェネリックスがどのようにしてフープを飛び越すのか把握しようとしています。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
がType
により拘束された2種類のパラメータT
とS
、持つクラスを宣言することです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
関連:http://stackoverflow.com/a/13261667/697449 –
ありがとうございます。それも私の読書でしたが、私は仕様で何かを見逃していた可能性が考えられた。それはキャストです! –