如何在 Processing 中将函数作为输入传递给 class
How can I pass a function as input for a class in Processing
我正在制作一个在处理过程中制作分形的框架,但是,我需要使用函数作为 class 的构造函数的参数。
类似于:
class Fractal {
String name;
void initialize;
Fractal(String Name, void setup) {
...
}
}
我猜你来自 Java脚本背景?
传统上,Java 并没有办法做到这一点。相反,您将传递接口的 anonymous 实例,如下所示:
interface Runner{
public void run();
}
class Fractal {
String name;
Runner initialize;
Fractal(String name, Runner setup) {
...
}
}
Runner r = new Runner(){
public void run(){
// whatever
}
}
Fractal fractal = new Fractal("name here", r);
请注意,Java 提供了一个 Runnable
界面,您可以使用该界面而不是创建自己的界面,但我想在这里拼写出来以使其更加明显。
自 Java8 起,您可以将对函数的引用作为参数传递。这称为 lambda 函数。谷歌搜索 "Java lambda function" 将 return 大量结果。
来自this answer:
public void pass() {
run(()-> System.out.println("Hello world"));
}
public void run(Runnable function) {
function.run();
}
根据您使用 Processing 的方式,您可能会坚持使用第一种方法,因为我认为 Processing 编辑器尚不支持 Java 8。
我正在制作一个在处理过程中制作分形的框架,但是,我需要使用函数作为 class 的构造函数的参数。 类似于:
class Fractal {
String name;
void initialize;
Fractal(String Name, void setup) {
...
}
}
我猜你来自 Java脚本背景?
传统上,Java 并没有办法做到这一点。相反,您将传递接口的 anonymous 实例,如下所示:
interface Runner{
public void run();
}
class Fractal {
String name;
Runner initialize;
Fractal(String name, Runner setup) {
...
}
}
Runner r = new Runner(){
public void run(){
// whatever
}
}
Fractal fractal = new Fractal("name here", r);
请注意,Java 提供了一个 Runnable
界面,您可以使用该界面而不是创建自己的界面,但我想在这里拼写出来以使其更加明显。
自 Java8 起,您可以将对函数的引用作为参数传递。这称为 lambda 函数。谷歌搜索 "Java lambda function" 将 return 大量结果。
来自this answer:
public void pass() {
run(()-> System.out.println("Hello world"));
}
public void run(Runnable function) {
function.run();
}
根据您使用 Processing 的方式,您可能会坚持使用第一种方法,因为我认为 Processing 编辑器尚不支持 Java 8。