从通用 Class 和比较器中获取错误

Getting Error from Generic Class and Comparator

我在使用比较器编写通用 class 代码时遇到了一些问题。我有一个名为 PQ 的 class,它接受一个比较器。 这是我的 class PQ。

import java.util.List;
import java.util.ArrayList;
  
class PQ<T extends Comparable<T>> {
    private final ArrayList<T> queue;

    PQ(Comparator<T> cmp){
        this.queue = new ArrayList<T>();
    }

    PQ(ArrayList<T> queue) {
        this.queue = queue;
    }

所以当问题需要我的代码接受时就会出现错误

Comparator<Object> c = (x, y) -> x.hashCode() - y.hashCode()
pq = new PQ<String>(c)

弹出此错误。

|  Error:
|  cannot find symbol
|    symbol:   variable pq
|  pq = new PQ<String>(c)
|  ^^
|  Error:
|  no suitable constructor found for PQ(java.util.Comparator<java.lang.Object>)
|      constructor PQ.PQ(java.util.Comparator<java.lang.String>) is not applicable
|        (argument mismatch; java.util.Comparator<java.lang.Object> cannot be converted to java.util.Comparator<java.lang.String>)
|      constructor PQ.PQ(ImList<java.lang.String>) is not applicable
|        (argument mismatch; java.util.Comparator<java.lang.Object> cannot be converted to ImList<java.lang.String>)
|  pq = new PQ<String>(c)
|       ^---------------^

非常感谢任何帮助!谢谢!

pq = new PQ<String>(c) // T is String

这样,你指定泛型参数T为String,所以这两个构造函数将接受Comparator<String>ImList<String>。你只是给了错误的参数Comparator<Object>

pq = new PQ<Object>(c) // T is Object, any subclass can be accept

你可以改成这个让它工作。