Java 使用函数参数创建方法

Java 使用函数参数创建方法,java,Java,我刚刚发现了这个方法: new Thread( new Runnable() { public void run() { try { // MY CODE } catch (Exception e) { e.printStackTrace();

我刚刚发现了这个方法:

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

我想知道我是否可以创建一个带有参数的方法,该参数是我将放入//我的代码中的函数。我可以这样做吗?方法:)

Java不支持第一类函数(即可以作为参数传递或从方法返回的函数)

但您可以使用策略模式的一些变体:使用方法
execute
创建一些接口
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
   }
});
接口可执行文件{
void execute();
}
...
void someMethod(最终可执行文件){
//这是你的密码
新线程(
新的Runnable(){
公开募捐{
试一试{

execute();//这实际上是在创建一个匿名类对象(它实现了Runnable接口)。因此,实际上您只传递类对象。这只是一种简写符号

这对于不打算在调用代码中再次重用/引用正在创建的对象的情况特别有用


现在你可以问一下你可以创建一个函数,它期望一个对象,而调用你可以通过上面所要求的对象/匿名类对象。

< P>高级语言,如普通LISP和Python,你正在寻找的是java。C++没有这个特性。C允许你把函数指针作为参数。C/++也有。

C++支持吗?抱歉,对于主题问题,我想知道:)NXQD:在比java大的范围内。C代表有第一类公民的代表。你最好单独问,熟悉C的人给你一个好的答案。