我想编写一个 Java 函数,它将获取 int[]
、float[]
或 double[]
作为输入。该算法完全相同(某种标量积)。如何编写一个能够处理所有类型的数值数组的函数?
最佳答案
在 Java 中没有简单的方法来处理这个问题。您可以:
- 使用 Wrapper 类型(
Integer[]
、Float[]
、Double[]
)并使用Number[ ]
作为参数。有效,因为数组在 Java 中是协变的:
public static void main(String[] args) {
f(new Integer[]{1,2,3});
f(new Float[]{1,2,3});
f(new Double[]{1,2,3});
}
private static void f(Number[] numbers) {
f[0].doubleValue();
}
请注意,这种方法会显着增加内存消耗。
将
int[]
和float[]
数组转换为double[]
并始终使用 double 。最好创建方法的重载版本,其中采用int[]
和float[]
的方法仅进行转换并委托(delegate)给实际的double[]
实现。我相信 Scala 可以无缝地处理这个问题,因为 Java 原始类型在 Scala 中是语义对象。
关于int[]、float[] 或 double[] 数组的 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625665/