gpt4 book ai didi

java - 陷入 Java 接口(interface)中的比较、泛型和继承

转载 作者:行者123 更新时间:2023-11-30 06:15:44 25 4
gpt4 key购买 nike

好的,这是我的问题的简化:

class Group<T extends Comparable<T>> implements Comparable<Group<T>> {
private String id;

public Group(String id) {
this.id = id;
}

@Override
public int compareTo(Group<T> o) {
return id.compareTo(o.id);
}
}

class InnerGroup extends Group<Integer> {
public InnerGroup(String id) {
super(id);
}
}

class OuterGroup extends Group<InnerGroup> {
public OuterGroup(String id) {
super(id);
}
}

编译器会产生此错误:

Error:(20, 32) java: type argument InnerGroup is not within bounds of type-variable T

引用 OuterGroup 尝试扩展 Group。 ItelliJ Idea 说这是因为 InnerGroup 必须实现 Comparable,但它已经通过从 Group 继承它来实现这一点。

事实上,如果我尝试强制 InnerGroup 实现 Comparable,那么编译器会提示,因为 InnerGroup 将有两个 Comparable 的实现,这是隐式认识到它已经实现了接口(interface),尽管前面提到的提示没有它.

关于如何摆脱这个难题有什么想法吗?

提前非常感谢。

最佳答案

绑定(bind)T extends Comparable<T>意味着Group只能使用与本身相当的类型进行参数化。 InnerGroup不是有效类型,因为它只能与 Group<Integer> 进行比较。要接受与某些父类(super class)型相当的类型,您可以将约束放宽为 T extends Comparable<? super T> .

关于java - 陷入 Java 接口(interface)中的比较、泛型和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49243097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com