我必須確保對象可以使自己的副本界面:子類繼承通用接口
public interface Duplicable<T extends Duplicable<T>> {
public T duplicate();
}
我現在有
class X implements Duplicable<X>
,但我也有一個擴展X.
一個Y級這是不是一個問題,直到我需要另一個通用類:
public class DoStuffWithDuplicable<T extends Duplicable<T>>
我不能使用通過ÿDoStuffWithDuplicable的通用版本,因爲它沒有實現Duplicable<Y>
但Duplicable<X>
,因爲它繼承了來自十
所以,我想
public class DoStuffWithDuplicable<T extends Duplicable<? super T>>
..但是,這意味着稍後引入不安全的鑄造
(T) obj.duplicate()
在代碼正文中。此外,班級參數更復雜,班級的使用更難理解。任何想法如何解決這個問題?
你能改寫這個:「我不能使用通過ÿDoStuffWithDuplicable的通用版本,因爲它由於它從X繼承它,因此不實現可複製但可複製的。「 ? – tbsalling
對不起,格式化問題 – phil
請注意,這正是一些計算機科學家說所有類都應該是「抽象」或「最終」的原因。你也會碰到'equals'的問題;你可能重構消除一個可實例化的'X'? – chrylis