私が持っているオブジェクトは、自分自身のコピーを作成することができますが保証インタフェースは:サブクラス
public interface Duplicable<T extends Duplicable<T>> {
public T duplicate();
}
私は今
class X implements Duplicable<X>
持っていますが、私はまた、X.
を拡張するクラスのYを持っています別の汎用クラスが必要になるまで、これは問題ではありません。
public class DoStuffWithDuplicable<T extends Duplicable<T>>
それはX.
からそれを継承しているので、それはDuplicable<Y>
が、Duplicable<X>
を実装していないので、私はだから私は
public class DoStuffWithDuplicable<T extends Duplicable<? super T>>
を試してみました..しかし、この手段、Yを使用してDoStuffWithDuplicableのジェネリック版を使用することはできません
後で危険なキャストを導入する
(T) obj.duplicate()
また、クラスパラメータはより複雑であり、クラスの使用法は理解しにくい。任意のアイデアはどのようにこの問題を回避するには?
あなたはこれを言い換えることができます:「それがないので、私は、Yを使用してDoStuffWithDuplicableのジェネリック版を使用することはできませんDuplicableを実装していないが、DuplicableはXから継承しているため。 ? – tbsalling
申し訳ありません、書式設定の問題 – phil
これはまさに、一部のコンピュータ科学者がすべてのクラスを「抽象的」または「最終的」であると言う理由のようなものです。あなたは 'equals'でも問題に遭遇します。あなたはインスタンス化可能な 'X'を排除するためにおそらくリファクタリングできますか? – chrylis