制作通用数组会返回与传递的参数类型相同的数组

时间:2012-11-13 00:31:48

标签: java generics

所以我想知道如何创建一个泛型方法,当传递给定类型的数组时,将返回相同类型的数组。我正在使用的代码目前看起来像这样:

public class InsertionSort<T extends Comparable<T>> extends Sort<T>
{
 public T[] sort (T[] data)
 {
  for (int index = 1; index < data.length; index++)
  {
     T key = data[index];
     int position = index;

     /* Shift larger values to the right */
     while (position > 0 && data[position-1].compareTo(key) > 0)
     {
        data[position] = data[position-1];
        position--;
     }

     data[position] = key;
  }

  return data;
 }
}

问题:当我将一个Integer []数组作为参数传递给此方法时,它将数据作为基本的Comparable []或Object []数组而不是Integer []返回。有没有办法改变它,以便,如果它传递一个Integer []数组,它对它进行排序并返回一个Integer []数组,但如果它传递一个String []数组,它会对它进行排序并返回一个String []的数组? (等等实现Comparable的任何其他类型)

2 个答案:

答案 0 :(得分:2)

从根本上说,Java方法不能返回多种类型。您可以返回一个泛型类型,对象,并在调用函数中输入它。

答案 1 :(得分:0)

使用它可能有点尴尬,但你可以这样做:

public class MyClass {

    public <K extends Comparable<K>> K[] getMe(K[] obj) {
        return obj;
    }

    public static void main(String[] args) {
        MyClass c = new MyClass();

        Integer[] b = {1,2,3};

        Integer[] d = c.getMe(b);

        for(Integer i : d) {
            System.out.println(i);
        }
    }

}