Kei*_*ons 0 java generics int autoboxing integer
好的,所以我正在尝试用Java编写一个通用的排序包(我正在学习算法课程,我认为这是一种很好的实践,无论是在算法意义上还是在Java中,因为我对语言都很新).无论如何,我认为最好的方法是创建一个Sort
具有多种排序方法的类,例如insertionSort
,mergeSort
等等.如果您觉得有更好的方法,请告诉我作为评论,因为我始终对编写更清晰,更高效的代码的建议.
至于问题:
我有骨干结构,想先尝试编码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);
}
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用Integer [] arr = new Integer [] {..}的情况下解决此问题?
你没有.这根本行不通.
我的印象是编译器会自动将我的int封装到Integer?
它将为个人int
提供Integer
价值观.但是没有转换int[]
为Integer[]
...因此结合Java泛型中缺乏原始支持,一种T[]
简单的方法无法采取int[]
.
有第三方库有转换方法,但它们总是会创建一个新数组,而不是在现有数组上创建一个视图.(有可能创建一个List<Integer>
可以查看现有数组的视图,尽管显然add
操作必须失败,因为set
具有null
值的操作也是如此.)