我正在尝试理解 Java 8 中的函数式接口(interface)。假设仿函数为 f():
public class A {
private double a;
public A(double a_) {
a = a_;
}
public void f(double[] b, double[] c, double[] d) {
d[0] = a * (b[0] + c[0]);
}
}
是否可以使用 Java 8 函数接口(interface)创建类似的构造?
public class B {
public double g(Function funct, double[] b, double[] c, double[] d) {
funct(b, c, d); //Call the functor, minor calculations
return d[0];
}
public static void main(String[] args) {
A a = new A(1);
double[] b = {2};
double[] c = {3};
double[] d = {4};
double res = g(a.f, b, c, d);
}
}
换句话说,是否可以使用对象的特定方法(或静态方法)作为仿函数?如果是这样,您能举一个简短的例子吗?
仿函数表示使用数据成员 (a) 和一些附加参数 (b、c、d) 的函数的说明...
最佳答案
我找到了以下解决方案。最初,创建接口(interface) IFunction:
public interface IFunction {
double eval(double [] a, double [] b, double [] c) ;
}
A 类仍然存在:
public class A {
private double a;
public A(double a_) {a = a_;}
public void f(double[] b, double[] c, double[] d) {
d[0] = a * (b[0] + c[0]);
}
}
但是,B类使用了函数指针:
public class B {
public double g(IFunction funct, double[] b, double[] c, double[] d) {
funct.eval(b, c, d);
return d[0];
}
public static void main(String[] args) {
A a = new A(1);
double[] b = {2};
double[] c = {3};
double[] d = {4};
double res = g(a::f, b,c, d);
}
我希望它有帮助......也许,有更好的解决方案:-)
关于java - 是否可以在 Java 8 中使用对象的特定方法(或静态方法)作为仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39142715/