You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java泛型队列使用Comparator时compare方法参数不匹配如何解决

错误根因

你定义的QueueImplement是泛型类,支持任意实现了Comparable的类型P作为存储元素类型,但你在min方法中硬编码了比较器类型为Comparator<MedicalShifts>,和泛型类型P不匹配:比较器要求接收MedicalShifts类型的参数,但你的数组元素是泛型P,所以调用comp.compare时会抛出类型不匹配的错误。
另外你代码中min方法里使用的n变量未定义,运行时会报错,需要替换为你定义的成员变量cantidad。

解决方案
  1. 同步修改Queue接口和QueueImplement实现类中min方法的参数类型,将Comparator<MedicalShifts>改为Comparator<P>,让比较器类型和队列存储的泛型类型保持一致。
  2. 将min方法中的未定义变量n替换为成员变量cantidad。

修改后的min方法代码如下:

@Override
public P min(Comparator<P> comp) {
    for (int i = 0; i < cantidad - 1; i++){
        for (int j = 0; j < cantidad - i - 1; j++){
             if (comp.compare(elements[j], elements[j+1]) > 0) {
                  P temp = elements[j];
                  elements[j] = elements[j+1];
                  elements[j+1] = temp;
             }
         }
    }
    return elements[0];
}

如果不希望min方法修改原队列的元素顺序,可以直接调用JDK自带的排序方法实现,代码更简洁效率也更高:

@Override
public P min(Comparator<P> comp) {
    P[] copy = Arrays.copyOf(elements, cantidad);
    Arrays.sort(copy, comp);
    return copy[0];
}

修改后泛型类型匹配,调用compare方法不会再抛出类型不匹配错误,且队列可以支持任意实现了Comparable的类型传入对应比较器调用min方法,复用性更强。

内容的提问来源于stack exchange,提问作者Luca Suc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:48:04