这是堆积数组问题和
这是heapcls
的构造函数,它扩展为Comparable
heapcls(T[] arr,boolean flag){
this(flag);
for (T item : arr) {
this.data.add(item);
}
for(int i=this.data.size()-1;i>=0;i--){
this.downheapify(i);
}
}
public static void main(String[] args) {
int[]arr={7,8,9,5,11,3,10,1,6,2,4,12,0,-1,13};
heapcls<Integer> client=`enter code here`new heapcls<>(arr,false);
}
this statement is giving ," Cannot infer type arguments error"
我应该如何更改CompareTo(默认功能)以纠正错误。 因为我还没有覆盖bydefault CompareTo function.pls指导我。
答案 0 :(得分:1)
实际问题是您尝试将int[]
传递给以T[]
为参数的构造函数。由于赋值左侧的类型是heapcls<Integer>
,因此构造函数应该将Integer[]
作为参数传递给它。
Type arguments to generic types can't be primitive types和arrays of primitives aren't autoboxed。 (自动装箱阵列需要分配一个完整的新阵列。)
您似乎只需使用Integer[]
代替int[]
即可解决此问题。
我不确定为什么我们得到&#34;无法推断类型参数&#34;在这种情况下的消息。我认为使用菱形类型(即<>
)时Java编译器存在错误,构造函数的参数不适用于任何声明的构造函数。 (这里是一个更简单的示例,显示错误消息的相同问题:http://ideone.com/wJx16i。)
在任何情况下,您的代码都不应该编译,但是因为您尝试将int[]
作为参数传递给实际上有Integer[]
作为参数的构造函数,不是因为类型参数无法推断。
作为旁注,Java中的类名按惯例以大写字母开头,因此heapcls
应为HeapCls
(可能只是Heap
)。< / p>