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

标签 java java-8 functor functional-interface

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

相关文章:

java - 无法解析对值 :$akka. 的替换 stream-blocking io dispatcher

java - 使用SAX java解析时为"Content is not allowed in trailing section."

java - 从外部 java 文件创建 Java 对象

java - Lambda 表达式将对象从一个列表添加到另一种类型的列表

c++ - ptr_fun - 无法创建类型?

java - HTMLUnit input.click() 未返回单击应加载的站点

Java 8 可选代码审查

Java - 使用运行时运行curl命令被代理阻止

c++ - 如何从成员函数创建仿函数?

c++ - 函数指针的模板化转换函数