java - 模拟函数指针

标签 java callback

以下类包含一个应使用回调技术计算积分的方法。

package integrals;

import java.lang.*;

public class Integrals 
{
    public static double f1(double x)
    {
        return x*5+Math.sin(x);
    }   

    public static double f2(double x)
    {
        return Math.pow(x*f1(-x),x);      
    }        

    public static double TrapezoidalIntegration(double a,double b,int n,double (*f)(double))
    {
        double rValue=0;
        double dx;

        dx=(b-a)/n;

        for(double i=f(a);i<f(b);i+=dx)
            rValue+=((f(i)+f(i+dx))*dx)/2.0;

        return rValue;
    }        

    public static void main(String[] args) 
    {


    }
}

在这种情况下如何进行回调?我宁愿避免 ☞such solution☜由于它的复杂性和丑陋。即使它是最不痛苦的,我也不知道如何在这里实现它。

最佳答案

How to make a callback in this case? I prefer to avoid such solution due to it's complexity and ugliness. Even if it is the least painful, I don't have an idea how to implement it here.

由于 Java 中没有函数指针,因此您必须改用通用接口(interface)。然后,您的函数必须是该接口(interface)的实现。是否要为那些实现类(即 class F1 extends Function { ... })或匿名类(即 new Function { ... })使用名称取决于您).是否在该类中编写实现,或者让类实现调用您现有的静态函数之一,也取决于您。

举一个例子,匿名类直接包含实现:

public class Integrals 
{

    public interface Function {
        double eval(double x);
    }

    public static final Function f1 = new Function() {
      public double eval(double x) {
        return x*5+Math.sin(x);
      }
    };

    public static final Function f2 = new Function() {
      public double eval(double x) {
        return Math.pow(x*f1.eval(-x),x);
      }
    };

    public static double TrapezoidalIntegration(double a,double b,int n,Function f)
    {
        // … using f.eval(x) to compute values

关于java - 模拟函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734052/

相关文章:

javascript - 如何从被调用函数获得响应?

javascript - 了解 .each() 发起的所有异步调用何时完成执行

java - 更改颜色而不影响之前绘制的任何内容

java - Web 应用程序中的 Jboss 共享库

java - Gradle / eclipse : Different behavior of german "Umlaute" when using equality?

java - 将包级 Java 注解转换为 Kotlin

java - 将带有 List 的 scala hashmap 转换为带有 java list 的 java hashmap

C# 应用程序到 C++ dll 通过回调返回到 C# 应用程序

java - 从回调中返回字符串 - Java

javascript - for 循环在回调完成之前退出