2 回答
TA贡献1877条经验 获得超1个赞
简短的回答是否定的,你不能。
Comparable是一个接口和对象/类系统的一部分。一个原语,例如long,不是该系统的一部分,只是它的盒装变体Long。
不幸的是,您甚至无法使用泛型来解决这个问题,因为它们也只能应用于类,而不能应用于基元(请参阅为什么 Java 泛型不支持基元类型?)。
因此,在Project Valhalla(值类型)发布之前,如果您想避免自动装箱,您将需要为所有 8 个原语(short, int, long, byte, char, float, double, boolean)提供硬编码的变体,这是没有办法的。
Java API 也必须这样做。您会看到Arrays#sort所有相关原语的重载方法和类的一个泛型重载。从它的文档:
sort(byte[] a)
sort(char[] a)
sort(double[] a)
sort(float[] a)
sort(int[] a)
sort(long[] a)
sort(short[] a)
sort(Object[] a)
sort(T[] a, Comparator<? super T> c)
TA贡献1836条经验 获得超3个赞
情况是我有一个函数,它调用Arrays.sort对给定数组进行排序。由于Arrays.sort可以同时对Stringand进行排序long,我想使用一个签名而不是两个String[]数组和 long[]数组。
可以像这样尝试方法重载。
public static void main(String [] args) {
String [] strs = {"c", "x", "a", "d"};
long [] ints = {4L, 343660L, 99L, 0L};
Testing t = new Testing();
t.sortMyArray(strs);
t.sortMyArray(ints);
System.out.println(Arrays.toString(strs)); // [a, c, d, x]
System.out.println(Arrays.toString(ints)); // [0, 4, 99, 343660]
}
private void sortMyArray(long[] myArray) {
Arrays.sort(myArray);
}
private void sortMyArray(String[] myArray) {
Arrays.sort(myArray);
}
添加回答
举报