gpt4 book ai didi

java - 用泛型类实现 Comparable

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:04 24 4
gpt4 key购买 nike

我想定义一个实现通用 Comparable 接口(interface)的类。在我的类里面,我还定义了一个泛型类型元素 T。为了实现接口(interface),我将比较委托(delegate)给T。这是我的代码:

public class Item<T extends Comparable<T>> implements Comparable<Item> {

private int s;
private T t;

public T getT() {
return t;
}

@Override
public int compareTo(Item o) {
return getT().compareTo(o.getT());
}
}

当我尝试编译它时,我得到以下错误信息:

Item.java:11: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;
return getT().compareTo(o.getT());
^
required: T#1
found: Comparable
reason: actual argument Comparable cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class Item
T#2 extends Object declared in interface Comparable
1 error

谁能告诉我为什么以及如何解决它?

最佳答案

Item (没有任何类型参数)是一个 raw type ,所以:

  1. 我们可以传递任何类型的 ItemItem.compareTo .例如,这将编译:

    new Item<String>().compareTo(new Item<Integer>())
  2. 方法o.getT()返回 Comparable而不是 T , 导致编译错误。

    在第 1 点下的示例中,通过 Item<Integer> 之后至 Item.compareTo , 然后我们会错误地传递一个 IntegerString.compareTo .编译错误阻止我们编写执行该操作的代码。

我认为你只需要删除原始类型:

public class Item<T extends Comparable<T>>
implements Comparable<Item<T>> {

...

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

关于java - 用泛型类实现 Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21544716/

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