在函数中取任何数值原始数组

Take Any Numeric Primitive Array in Function

我想编写一个函数,它可以接受任何数字二维数组。使用 Java 的对象类型,这很容易,因为我可以这样做:

public void process2DArray(Number [][] array) {
    // processing...
}

但是,如果我可以使用任何原语扩展此函数,使用起来会容易得多,但是,由于数组不是自动装箱的,因此以下代码不起作用:

double [][] array = new double [][] {{1,2},{3,4}};
process2DArray(array); // cannot invoke on array type double[][]

此函数将以相同的方式处理所有数字。

我能想到的解决此问题的最佳方法是为每个基本类型创建一个函数,将数组转换为 Number [][] 类型,然后将其传递给该函数。这看起来有点笨拙 - 有没有更优雅的方式?

The best way I can think of to solve this to create a function for each primitive type (or at least one for long and one for double) which converts the array to a Number [][] type, and then passes it to the function. This just seems a little clunky - is there a more elegant way?

每个原始类型的重载并不是必需的。
高效,避免了装箱操作和数值提升。

问题是这样的:你的目标是什么?拥有效率较低的简洁代码或拥有更高效的较长代码。

如果您想保持代码高效,没有一种优雅的方法可以做到这一点。您建议的使用多种方法将原始数组转换为 Number[][] 的解决方案效率非常低 - 它涉及装箱数组的所有原始值。

这就是为什么 JDK 为不同的原始类型复制相同的代码。

您可以在 Arrays 静态方法中查看示例。例如,它包含 14 个 sort 方法,用于 7 种不同的原始数组类型。