gpt4 book ai didi

Java函数作为方法参数

转载 作者:行者123 更新时间:2023-11-29 06:30:41 25 4
gpt4 key购买 nike

我正在使用一个以图形表示的系统。我经常需要以某种方式遍历图形并对沿途传递的节点应用不同的操作。我想在一个类中实现遍历逻辑,然后它将获得必须作为它提供的方法的输入参数应用的操作。像这样:

class GraphTraverse{

public static void traverseAndApplyOperation(Graph graph, Node startNode, Function operationToApply){

// go through the graph and apply the input function (specified somewhere else) on the passed nodes

}
}

Java 是否提供将方法作为输入参数传递的可能性?如果是,正确的语法是什么?

最佳答案

Java 8 及更高版本

Java 8 使用预定义接口(interface)提供了很好的方法 java.util.function ,具体取决于您想要的功能类型。

在您的情况下,您可能正在寻找一个采用 Node 的函数并且不返回任何东西。在 Java 8 中,这称为 Consumer<Node> 。 .

声明

public static void traverseAndApplyOperation(Graph graph, Node startNode, Consumer<Node> operationToApply) {
// traversal logic with current node 'node'
operationToApply.accept(node); // use it this way
}

用法

使用 lambda 表达式:

traverseAndApplyOperation(graph, startNode, node -> { /*do something here*/});

或者更好,如果你有一个静态方法 static void MyClass.myMethod(Node) ,你可以直接引用它:

traverseAndApplyOperation(graph, startNode, MyClass::myMethod);

如果您在 Node 中有一个非静态 0-arg 方法,它也可以工作类:

traverseAndApplyOperation(graph, startNode, Node::myMethod);

Java 7 及以下

只需使用一个方法定义您自己的接口(interface),类似于 Java 8 的 Consumer<Node> .

public interface NodeConsumer {
void accept(Node node);
}

那么你不能用 lambda 实例化它,但你仍然可以使用老式的方法:

traverseAndApplyOperation(graph, startNode, new NodeConsumer() {
@Override
public void accept(Node node) {
// do something here
}
});

关于Java函数作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114617/

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