从通用 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
你可以改成这个让它工作。
我在使用比较器编写通用 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
你可以改成这个让它工作。