使用Java中的泛型函数进行Integer / int自动装箱查询

时间:2014-03-06 10:52:19

标签: java generics integer int autoboxing

好的,所以我正在尝试用Java编写一个通用的排序包(我正在学习算法课程,我认为这是一种很好的实践,无论是在算法意义上还是在Java中,因为我对语言很新)。无论如何,我认为最好的方法是创建一个Sort类,其中包含多个排序方法,例如insertionSortmergeSort等。如果您觉得有更好的方法这个,请作为评论让我知道,因为我总是乐于接受编写更清晰,更有效的代码的建议。

至于问题:

我有骨干结构,想先尝试编码insertionSort方法。但是,我试图传递一个整数数组但是遇到了一些问题。首先,使用泛型我理解你必须使用<Integer>而不是<int>,但出于某种原因,如果我创建一个像int[] arr = new int[]{..}这样的数组并将其传递给泛型它不行。如何在不使用Integer[] arr = new Integer[]{..}的情况下解决此问题?我的印象是编译器会自动将int打包到Integer

我的代码:

public class Sort<T> {
    public T[] insertionSort(T[] array) {
        // do some stuff
        return array;
    }

    public static void main(String[] args) {
        int[] orig = new int[]{1,35,3,2,4634,2,46,7,33,56};
        Sort<Integer> sorter = new Sort<Integer>();
        sorter.insertionSort(orig);
    }
}

1 个答案:

答案 0 :(得分:5)

  

如何在不使用Integer []的情况下解决此问题arr = new Integer [] {..}?

你没有。这根本行不通。

  

我的印象是编译器会自动将我的int封装到Integer?

对于个人intInteger值,它会。但是没有从int[]Integer[]的转换...因此,结合Java泛型中缺乏原始支持的方法,只需T[]的方法不能采取int[]

有第三方库有转换方法,但它们总是会创建一个 new 数组,而不是在现有数组上创建一个视图。 (可以创建List<Integer>作为现有数组的视图,但显然add操作必须失败,set操作null也是如此值。)