使用函数参数创建方法

时间:2011-05-21 06:51:08

标签: java

我刚刚发现了这种方法:

new Thread(
            new Runnable() {
                public void run() {
                    try {
                        // MY CODE
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();

我想知道我是否可以使用参数创建一个方法是我将放入// MY CODE的函数。我能这样做吗?以及如何:)

3 个答案:

答案 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