在函数中取任何数值原始数组
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 种不同的原始数组类型。
我想编写一个函数,它可以接受任何数字二维数组。使用 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 种不同的原始数组类型。