オブジェクトが自分自身のコピーを作成できるようにするインターフェイスがあります。
public interface Duplicable<T extends Duplicable<T>> {
public T duplicate();
}
私は今持っています
class X implements Duplicable<X>
しかし、X を拡張するクラス Y もあります。
別のジェネリック クラスが必要になるまでは、これは問題ではありません。
public class DoStuffWithDuplicable<T extends Duplicable<T>>
Y を使用して DoStuffWithDuplicable のジェネリック バージョンを使用することはできません。これは実装されていませんDuplicable<Y>
がDuplicable<X>
、X から継承されているためです。
だから私は試しました
public class DoStuffWithDuplicable<T extends Duplicable<? super T>>
..しかし、これは後で安全でないキャストを導入することを意味します
(T) obj.duplicate()
コード本体で。また、クラス パラメータが複雑になり、クラスの使用法が理解しにくくなります。この問題を回避する方法はありますか?