继承通用接口的子类

phi*_*hil 8 java generics

我有一个界面,确保对象可以自己复制:

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)

在代码体中.类参数也更复杂,类的使用更难以理解.任何想法如何解决这个问题?

Ara*_*idi 1

我可能没有正确理解你的问题,但我会尝试一下。

首先,为什么要有这样一个自我扩展的接口?

你可以尝试的是这样的:

public interface Duplicable<T> {
    public T duplicate();
}
Run Code Online (Sandbox Code Playgroud)

然后,当您使用另一个类,您希望泛型参数可重复时,您可以这样做:

public class X<T extends Duplicable<T>> {
    code...
}
Run Code Online (Sandbox Code Playgroud)

现在,当您从 X 继承时,子类中的任何通用组件都必须是可复制的。