我刚刚发现了这种方法:
new Thread(
new Runnable() {
public void run() {
try {
// MY CODE
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
我想知道我是否可以使用参数创建一个方法是我将放入// MY CODE的函数。我能这样做吗?以及如何:)
答案 0 :(得分:4)
Java不支持第一类函数(即可以作为参数传递或从方法返回的函数)。
但您可以使用策略模式的某些变体:使用方法Executable
创建一些接口execute
,并将其作为参数传递给匿名实现:
interface Executable {
void execute();
}
...
void someMethod(final Executable ex) {
//here's your code
new Thread(
new Runnable() {
public void run() {
try {
ex.execute(); // <----here we use passed 'function'
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
...
//here we call it:
someMethod(new Executable() {
public void execute() {
System.out.println("hello"); // MY CODE section goes here
}
});
答案 1 :(得分:2)
这实际上是在创建一个匿名类对象(实现Runnable接口)。因此,您只能传递类对象。这只是一种简写符号。
这对于您不打算在调用代码中重新使用/引用您正在创建的对象的情况特别有用。
现在提出您的问题 - 您可以创建一个期望对象的函数,并且在调用时可以传递所需的对象/匿名类对象,如上所述。
答案 2 :(得分:1)
Common Lisp和Python等高级语言有first-class functions,这正是您所寻求的。 Java没有此功能。相反,你必须使用接口。 C和C ++允许将函数指针作为参数传递。 C ++也有function objects。