可比接口(堆)

时间:2017-07-18 00:11:41

标签: java data-structures heap

这是堆积数组问题和 这是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指导我。

1 个答案:

答案 0 :(得分:1)

实际问题是您尝试将int[]传递给以T[]为参数的构造函数。由于赋值左侧的类型是heapcls<Integer>,因此构造函数应该将Integer[]作为参数传递给它。

Type arguments to generic types can't be primitive typesarrays of primitives aren't autoboxed。 (自动装箱阵列需要分配一个完整的新阵列。)

您似乎只需使用Integer[]代替int[]即可解决此问题。

我不确定为什么我们得到&#34;无法推断类型参数&#34;在这种情况下的消息。我认为使用菱形类型(即<>)时Java编译器存在错误,构造函数的参数不适用于任何声明的构造函数。 (这里是一个更简单的示例,显示错误消息的相同问题:http://ideone.com/wJx16i。)

在任何情况下,您的代码都不应该编译,但是因为您尝试将int[]作为参数传递给实际上有Integer[]作为参数的构造函数,不是因为类型参数无法推断。

作为旁注,Java中的类名按惯例以大写字母开头,因此heapcls应为HeapCls(可能只是Heap)。< / p>