【问题标题】:Java generics: Bound mismatch.Looking for the valid substituteJava泛型:绑定不匹配。寻找有效的替代品
【发布时间】:2015-12-17 21:52:25
【问题描述】:

我有几个通用类:

public interface Data<E> {}
public interface Clonable<E extends Clonable<E>> {}
public interface NaturalNumberInterface extends Data<NaturalNumberInterface> {}
public class NaturalNumber implements NaturalNumberInterface {}
public interface SetInterface<E extends Data<E>> extends Clonable<SetInterface<E>> {}
public class Set<E extends Data<E>> implements SetInterface<E> {}

当我尝试创建 Set Set&lt;NaturalNumber&gt; s=new Set&lt;NaturalNumber&gt;(); 的新实例时,编译器会说:

NaturalNumber 不能有效替代 Set&lt;E&gt; 类型的类型参数 &lt;E extends Data&lt;E&gt;&gt;

也许你能帮我找到错误,因为我花了很长时间没有找到解决方案。

【问题讨论】:

  • Data 是如何定义的?
  • 还有如何定义 SetInterface。请至少提供编译代码
  • 由于 OP 喜欢我的回答,看来我的假设是正确的。我编辑了问题以反映它。 ListListInterface 对于这个问题似乎是不必要的,所以我删除了它们。

标签: java generics inheritance interface multiple-inheritance


【解决方案1】:

我假设您的SetInterface 的定义方式与ListInterface 相同,而Data 只是interface Data&lt;T&gt;

SetInterface 的通用参数是F-boundedE extends Data&lt;E&gt;。在您当前的代码NaturalNumber 中,类型扩展Data&lt;NaturalNumberInterface&gt;。因此,如果ENaturalNumber,则违反了条件,因为它应该扩展更具体的类型Data&lt;NaturalNumber&gt;

您也应该对NaturalNumberInterface 使用 F 边界:

public interface NaturalNumberInterface<T extends NaturalNumberInterface<T>> extends Data<T>
public class NaturalNumber implements NaturalNumberInterface<NaturalNumber>

这样就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多