如何将一个整数数组传递给期望`Array <T>`的方法?
我已经将java shellSort转换为Kotlin。 问题是我不知道要调用这个方法。
Java的
package Sorts; public class ShellSort extends Sorter{ @Override public <T extends Comparable<? super T>> void sort(T[] a) { int h = 1; while((h*3+1) < a.length) h = 3*h+1; while(h > 0){ for(int i = h-1; i < a.length; i++){ T s = a[i]; int j = i; for(j = i; (j>=h) && (a[jh].compareTo(s) > 0); j-=h) a[j] = a[jh]; a[j] = s; } h /= 3; } } }
科特林
fun <T : Comparable<T>> shellSort(a: Array<T>) { var h = 1 while (h * 3 + 1 < a.size) h = 3 * h + 1 while (h > 0) { for (i in h - 1..a.size - 1) { val s = a[i] var j = i j = i while (j >= h && a[j - h].compareTo(s) > 0) { a[j] = a[j - h] j -= h } a[j] = s } h /= 3 } }
我试图调用的是将intArray强制转换为数组
val array = intArrayOf(5, 3, 0, 2, 4, 1, 0, 5, 2, 3, 1, 4) shellSort(arrayOf(array))
哪个出错
Type parameter bound for T in fun <T : Comparable<T>> shellSort(a: Array<T>) : Unit is not satisfied: inferred type IntArray is not a subtype of Comparable<IntArray>
intArrayOf
返回不能扩展 Array<Int>
IntArray
。 如文档中所述, Kotlin为各种避免装箱开销的基元提供了专门的数组类型。 IntArray
对应于Java的int[]
。 ShellSort.sort
方法(包括Kotlin和Java)都需要盒装版本。
您可以使用toTypedArray
扩展方法将IntArray
转换为Array<Int>
如下所示:
val array = intArrayOf(5, 3, 0, 2, 4, 1, 0, 5, 2, 3, 1, 4).toTypedArray() shellSort(array)
或者@KirillRakhman建议直接创建一个盒装版本:
shellSort(arrayOf(5, 3, 0, 2, 4, 1, 0, 5, 2, 3, 1, 4))
这条线
shellSort(arrayOf(array))
不会将IntArray array
转换为常规Array<Integer>
,而是将其包装在Array<IntArray>
类型的单个数组中。 使用IntArray.toTypedArray()
将其转换为通用数组,如@miensol
。