情况是我有一个函数,它调用 Arrays.sort
对给定的数组进行排序。由于 Arrays.sort
可以对 String 和 long 进行排序,我想使用一个签名而不是两个 String[] array
和 long[] array
.
我试过像 Comparable[]
这样的东西,它不匹配 long[]
。我也试过将 long
更改为 Long
。但是装箱和拆箱的过程大大减慢了排序速度。
所以我想知道是否有一种我可以指定的类型与它们都匹配?还是一般匹配所有支持的Arrays.sort
类型?
最佳答案
简短的回答是不,你不能。
Comparable
是一个接口(interface),是对象/类系统的一部分。原语,例如 long
,不是该系统的一部分,只是其盒装变体 Long
。
不幸的是,您甚至无法使用泛型来解决这个问题,因为它们也只能应用于类,而不能应用于原语(参见 Why don't Java Generics support primitive types?)。
直到 Project Valhalla (值类型)版本,您需要为所有 8 个基元提供硬编码变体(short
、int
、long
、 byte
, char
, float
, double
, boolean
) 如果你想避免自动装箱, 没有办法绕过。
Java API 也必须这样做。您会看到所有相关基元的 Arrays#sort
重载方法和类的一个通用重载。来自其 documentation :
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)
关于java - 我如何指定一个同时匹配 String 和 long 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53093685/