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

Kei*_*ons 0 java generics int autoboxing integer

好的,所以我正在尝试用Java编写一个通用的排序包(我正在学习算法课程,我认为这是一种很好的实践,无论是在算法意义上还是在Java中,因为我对语言都很新).无论如何,我认为最好的方法是创建一个Sort具有多种排序方法的类,例如insertionSort,mergeSort等等.如果您觉得有更好的方法,请告诉我作为评论,因为我始终对编写更清晰,更高效的代码的建议.

至于问题:

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

我的代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

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

你没有.这根本行不通.

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

它将为个人int提供Integer价值观.但是没有转换int[]Integer[]...因此结合Java泛型中缺乏原始支持,一种T[]简单的方法无法采取int[].

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