如何指定一个同时匹配 String 和 long 的类型?

情况是我有一个函数,它调用Arrays.sort对给定数组进行排序。由于Arrays.sort可以对 String 和 long 进行排序,我想使用一个签名而不是两个String[] arraylong[] array

我试过类似的东西Comparable[],它不会匹配long[]。我也尝试更改longLong. 但是装箱和拆箱的过程显着减慢了排序。

所以我想知道是否有一种我可以指定匹配它们的类型?或者通常匹配所有支持的类型Arrays.sort


繁花不似锦
浏览 136回答 2
2回答

冉冉说

简短的回答是否定的,你不能。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)

米脂

情况是我有一个函数,它调用Arrays.sort对给定数组进行排序。由于Arrays.sort可以同时对Stringand进行排序long,我想使用一个签名而不是两个String[]数组和 long[]数组。可以像这样尝试方法重载。public static void main(String [] args) {&nbsp; &nbsp; String [] strs = {"c", "x", "a", "d"};&nbsp; &nbsp; long [] ints = {4L, 343660L, 99L, 0L};&nbsp; &nbsp; Testing t = new Testing();&nbsp; &nbsp; t.sortMyArray(strs);&nbsp; &nbsp; t.sortMyArray(ints);&nbsp; &nbsp; System.out.println(Arrays.toString(strs)); // [a, c, d, x]&nbsp; &nbsp; System.out.println(Arrays.toString(ints)); // [0, 4, 99, 343660]}private void sortMyArray(long[] myArray) {&nbsp; &nbsp; Arrays.sort(myArray);}private void sortMyArray(String[] myArray) {&nbsp; &nbsp; Arrays.sort(myArray);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java