在Java中,最接近函数指针的替代品是什么?

2022-08-31 05:07:01

我有一个大约十行代码的方法。我想创建更多执行完全相同操作的方法,除了一个将更改一行代码的小计算。这是一个完美的应用程序,用于传入函数指针以替换该行,但Java没有函数指针。我最好的选择是什么?


答案 1

匿名内部类

假设您希望使用返回 .
首先,您必须定义一个接口,如果无法重用现有接口,则该函数作为其唯一成员。Stringint

interface StringFunction {
    int func(String param);
}

采用指针的方法将只接受如下实例:StringFunction

public void takingMethod(StringFunction sf) {
   int i = sf.func("my string");
   // do whatever ...
}

这样称呼:

ref.takingMethod(new StringFunction() {
    public int func(String param) {
        // body
    }
});

编辑:在Java 8中,您可以使用lambda表达式调用它:

ref.takingMethod(param -> bodyExpression);

答案 2

对于每个“函数指针”,我将创建一个实现计算的小函子类。定义所有类都将实现的接口,并将这些对象的实例传递到更大的函数中。这是“命令模式”和“战略模式”的组合。

@sblundy的例子很好。