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

标签 java types

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

我试过像 Comparable[] 这样的东西,它不匹配 long[]。我也试过将 long 更改为 Long。但是装箱和拆箱的过程大大减慢了排序速度。

所以我想知道是否有一种我可以指定的类型与它们都匹配?还是一般匹配所有支持的Arrays.sort类型?

最佳答案

简短的回答是,你不能。

Comparable 是一个接口(interface),是对象/类系统的一部分。原语,例如 long,不是该系统的一部分,只是其盒装变体 Long

不幸的是,您甚至无法使用泛型来解决这个问题,因为它们也只能应用于类,而不能应用于原语(参见 Why don't Java Generics support primitive types?)。

直到 Project Valhalla (值类型)版本,您需要为所有 8 个基元提供硬编码变体(shortintlong 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/

相关文章:

java - CBC 中的凯撒/如何在 Java 中进行异或?

c++ - 地址是什么数据类型?

c# - 如果不使用 Object 类型,.NET 是否也能正常运行?

接受多种类型作为单个参数的 Java 方法

C long unsigned int 的简写形式是什么

java - tomcat运行时上下文初始化失败

java - 自定义方法spring mongo存储库不返回数据

java - 从 jInternalFrame 调用 jFrame 不起作用

java - Type Erasure 抬头,如何规避?

java - 从 Spring JAR 读取文件