我必须将原始二维数组传递给过滤例程。无论数组的类型如何,过滤算法(中值过滤器)都是相同的。有没有办法以通用方式传递任何类型的数组,或者应该我用不同的数组类型重载了同一个函数。在第二种情况下,必须对不同的数据类型重复相同的代码。
int[][] medianfilter(int[][] arr){ ... }
float[][] medianfilter(float[][] arr){ ... }
有没有办法使上面的代码成为通用代码,而不是在每个重载函数中重复 medianfilter 的代码?
最佳答案
对于原始数组没有很好的方法来做到这一点,这就是为什么所有的库函数(例如 java.util.Arrays)也有这些重复的方法。
你可以定义一个方法
Object[] medianfilter(Object[] arr); // note the missing dimension
并使用反射找出运行时类型。这就是 System.arraycopy 正在做的事情。但是您随后需要进行类型转换。丑。
int[][] result = (int[][]) medianFilter( input );
使用重复的方法。
关于Java Generic Primitive 类型 n-d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767168/