我有一个接口(interface)可以确保对象可以复制自己:
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()
在代码体中。类参数也更复杂,类的用法更难理解。有什么想法可以解决这个问题吗?
最佳答案
我可能没有正确理解您的问题,但我会试一试。
首先,为什么你有一个这样扩展自身的接口(interface)?
你可以试试这个:
public interface Duplicable<T> {
public T duplicate();
}
然后当你使用另一个你希望泛型参数是可复制的类时,你可以这样做:
public class X<T extends Duplicable<T>> {
code...
}
现在,当您从 X 继承时,子类中的任何通用组件都必须是可复制的。
关于java - 继承泛型接口(interface)的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402941/