我有一个确保对象可以复制自己的接口(interface):
public interface Duplicable<T extends Duplicable<T>> {
public T duplicate();
}
我现在有
class X implements Duplicable<X>
但是我也有一个Y扩展了X的类。
在我需要另一个泛型类之前,这不是问题:
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()
在代码主体中。而且,类参数更复杂,并且类的用法更难以理解。任何想法如何解决这个问题?
最佳答案
我可能不太了解您的问题,但我会解决的。
首先,为什么要有一个这样扩展自己的接口(interface)?
您可以尝试的是:
public interface Duplicable<T> {
public T duplicate();
}
然后,当您在希望通用参数可复制的地方使用另一个类时,您将像这样进行操作:
public class X<T extends Duplicable<T>> {
code...
}
现在,当您从X继承时,子类中的任何通用组件都必须是可复制的。