处理此泛型错误

时间:2011-10-31 17:37:22

标签: java

我需要在以下代码中对泛型有一些帮助:

public <T extends Comparable<T>> int insertionSort(T[] a) {
   // throw new RuntimeException("not implemented");
      final int L = a.length;
      int compares = 0;

      for(int i = 1; i < L; i++){
          for(int j = i; j > 0 && a[j].compareTo(a[j - 1]) < 0; j--){

              Comparable tmp = a[j];   // PROBLEM HERE
              a[j] = a[j - 1];
              a[j - 1] = tmp;       // PROBLEM HERE

              compares++;
          }
      }

    return compares;
  }

//问题在这里 代码中的这两行是错误的,需要帮助修复它们。

感谢

修改

错误是我无法进行作业

4 个答案:

答案 0 :(得分:2)

a[j]T,而不是Comparable

您只能将其放入T类型的变量中。

答案 1 :(得分:1)

你的问题是Comparable是一个接口,而不是一个类。您需要创建一个实现Comparable的类的Object。

如果T实现了Comparable,那么您可以将tmp声明为T并使用它:

 T tmp = a[j];
 a[j] = a[j - 1];
 a[j - 1] = tmp;

答案 2 :(得分:0)

而不是Comparable tmp,使用T tmp,我认为应该修复它。

答案 3 :(得分:0)

您的代码中需要注意的事项:

  • 你对T的定义是递归的。如果需要,可以找出一个界面。
  • 编译器明确指出你的作业是错误的! : - )

    可比较的tmp = a [j];

这将有效,因为这是真实和正确的。由于T扩展了Comparable,因此T 是-a 可比较。

  a[j - 1] = tmp;

这不起作用,因为您正在尝试将超类实例分配给子类实例。可比较不保证具有T行为。因此错误。

您可以尝试参数化此功能所在的类。使用该参数定义T.再次,您可能需要使用接口。除非我们更了解其他相关的设计目标,否则很难提出建议。代码方面,错误是正确和合理的。