我用java制作了一个Matrix类,我想添加一些init()
函数
我需要一个Function
对象作为第一个参数,如果需要,函数的参数作为第二个参数
我遇到了两个问题:\
- 如果函数只接受一个参数,则表示法
init(Function<> func, Object... args)
会在编译时引发错误:incompatible types: java.lang.Object cannot be converted to int
- 如果我解决这个问题(通过调用
init(FuncClass::Func, 7, null)
,这似乎不是一个好主意),我会在func.apply(args)
处抛出一个错误,因为incompatible types: java.lang.Object cannot be converted to int
当前函数定义如下:
public void init(Function<Object, Double> function, Object... args){
for (int i = 0; i < this.rows; i++) {
for (int j = 0; j < this.cols; j++) {
this.data[i][j] = function.apply(args);
}
}
}
data
对象定义为:double[][] data = new double[rows][cols];
编辑:由于它出现在评论中,我注意到标题可能会被误解
问题不是根本没有输入。它不应该有预先确定的输入。我的意思是,它可以定义为func()
和func(double min, double max, Random rn, double seed)
如果你能提出一个更具解释性的标题,请这样做。
经过一番研究,我发现:
- 接口
Function<T, R>
是专门为1输入1输出功能设计的 - 在父程序包(
java.util.function
)中,不存在用于接受一个以上参数的函数的接口。(编辑:正如评论中所指出的,还有一些接口需要两个参数。不过,这并不能解决我的问题。)
解决方案可能是强制作为参数给定的函数接受对象数组作为唯一参数,然后根据需要解析它们。
例如:
public static double func(Object[] args){
int a = (int) args[0];
int b = (int) args[1];
return (double) a * b;
}
(解析不是在try-catch块中完成的,因为如果给函数提供了错误的args,我无论如何都希望抛出异常)