gpt4 book ai didi

java - 是否可以在 Java 8 中使用对象的特定方法(或静态方法)作为仿函数

转载 作者:行者123 更新时间:2023-12-02 09:09:06 25 4
gpt4 key购买 nike

我正在尝试理解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com