我有一个界面,确保对象可以自己复制:
public interface Duplicable<T extends Duplicable<T>> {
public T duplicate();
}
Run Code Online (Sandbox Code Playgroud)
我现在有
class X implements Duplicable<X>
Run Code Online (Sandbox Code Playgroud)
但我也有一个延伸X的Y类.
这不是问题,直到我需要另一个泛型类:
public class DoStuffWithDuplicable<T extends Duplicable<T>>
Run Code Online (Sandbox Code Playgroud)
我不能使用Y的通用版本的DoStuffWithDuplicable,因为它没有实现,Duplicable<Y>但Duplicable<X>因为它从X继承它.
所以我试过了
public class DoStuffWithDuplicable<T extends Duplicable<? super T>>
Run Code Online (Sandbox Code Playgroud)
..但这意味着后来引入了一个不安全的演员
(T) obj.duplicate()
Run Code Online (Sandbox Code Playgroud)
在代码体中.类参数也更复杂,类的使用更难以理解.任何想法如何解决这个问题?