我有一个确保对象可以复制自己的接口(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继承时,子类中的任何通用组件都必须是可复制的。

10-08 06:20