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);
}
添加回答
舉報