Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型在类函数内的重新定义_Java_Generics - Fatal编程技术网

Java泛型在类函数内的重新定义

Java泛型在类函数内的重新定义,java,generics,Java,Generics,我有一个类,打算实现一个泛型堆,而我使用的泛型有一个问题。类定义是 public class BinHeap仅在类上定义T。目前,您正在方法上定义第二个T,它隐藏类上的T。当您删除方法上对T的重新定义时,您只需参考方法中的T public T deleteMin() { // T is already in scope private int newHole(int hole, T item) { int ret = -1; if(1+(hole*2) < num+1) {

我有一个类,打算实现一个泛型堆,而我使用的泛型有一个问题。类定义是
public class BinHeap仅在类上定义
T
。目前,您正在方法上定义第二个
T
,它隐藏类上的
T
。当您删除方法上对
T
的重新定义时,您只需参考方法中的
T

public T deleteMin() {  // T is already in scope
private int newHole(int hole, T item) {
  int ret = -1;
  if(1+(hole*2) < num+1) {
     if(2+(hole*2) == num+1) {
        if(arr[1+(hole*2)].compareTo(item) == -1) {
           ret = 1+(hole*2);
        }
     }
     else {
        int smallerChild;
        int smaller = arr[1+(hole*2)].compareTo(arr[2+(hole*2)]);
        if(smaller == -1) {
           smallerChild = 1+(hole*2);
        }
        else {
           smallerChild = 2+(hole*2);
        }
        if(arr[smallerChild].compareTo(arr[hole]) == -1) {
           ret = smallerChild;
        }
     }
  }
  return ret;
}
BinHeap.java:51: error: method newHole in class BinHeap<T#1> cannot be applied to given types;
  int newhole = newHole(hole,temp);
                ^
required: int,T#1
found: int,T#2
reason: actual argument T#2 cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<? super T#1> declared in class BinHeap
T#2 extends Comparable<? super T#2> declared in method <T#2>deleteMin()
public T deleteMin() {  // T is already in scope