java - 继承泛型接口(interface)的子类

标签 java generics

我有一个接口(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/

相关文章:

JavaMail - MimeMessageHelper 附件不随邮件一起发送

java - 错误 : the constructor intent is undefined

java - 如何使用 X-Forwarded-* header 创建没有上下文路径的 URI?

java - boolean containsAll(Collection<?> c) vs boolean addAll(Collection<? extends E> c); 的设计决策在集合框架中

java - 我遇到 AsyncTask 类的问题

java - 第一次调用prepareStatement工作正常,但第二次调用java.sql.SQLException : Connection has already been closed

SwiftUI - 我可以为通用 View 定义一个空的初始值设定项吗?

java - 用于构建对象的通用验证和转换链的代码

Java 泛型 - <K extends Middle> - K 是 Middle 的真正子代吗?

swift - 检查泛型类型是否是 Swift 中的函数类型