Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提及fnc_Java - Fatal编程技术网

Java 提及fnc

Java 提及fnc,java,Java,java中有没有一种方法可以执行以下操作: f(f1); //in some other place f(f2) //etc. Runnable x = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub } }; //<-- notice the semi-colon. publ

java中有没有一种方法可以执行以下操作:

f(f1);
//in some other place
f(f2)
//etc.
    Runnable x = new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub

        }

    };   //<-- notice the semi-colon.
public void f( Runnable x ) {
   System.out.println("Hello");
   x.run();
}
无效fncvoid引用到其他函数

我尝试的是,基本上我有很多地方需要向用户显示相同的文本,唯一的区别是在该文本之后调用哪个方法。因此,例如,不要写:

System.out.println("Hello");
f1();
//in some other place
System.out.println("Hello");
f2();
//etc
我想定义一个函数:

public void f(void Reference_to_other_func())
{
System.out.println("Hello");
Reference_to_other_func();//HERE I'M INVOKING 
}
f(new Callback() {
    public void doCallback() {
        f1();
    }
});
f(new Callback() {
    public void doCallback() {
        f2();
    }
});
然后,我可以编写如下内容,而不是重复整个代码:

f(f1);
//in some other place
f(f2)
//etc.
    Runnable x = new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub

        }

    };   //<-- notice the semi-colon.
public void f( Runnable x ) {
   System.out.println("Hello");
   x.run();
}

感谢您的回答

Java没有一流的函数,这使得大多数函数编程技术的实现有些繁琐

在这种情况下,您可以创建一个接口:

public interface Callback {
    void doCallback();
}
public void f(Callback callback) {
    System.out.println("Hello");
    callback.doCallback();
}
编辑:也可以使用,它允许您指定返回类型

然后声明f以获取此接口的实例:

public interface Callback {
    void doCallback();
}
public void f(Callback callback) {
    System.out.println("Hello");
    callback.doCallback();
}
并将此接口的实例传递给函数:

public void f(void Reference_to_other_func())
{
System.out.println("Hello");
Reference_to_other_func();//HERE I'M INVOKING 
}
f(new Callback() {
    public void doCallback() {
        f1();
    }
});
f(new Callback() {
    public void doCallback() {
        f2();
    }
});

如您所见,除非您经常这样做,否则收益不会变得明显。

Java没有一流的函数,这使得大多数函数编程技术的实现有些繁琐

在这种情况下,您可以创建一个接口:

public interface Callback {
    void doCallback();
}
public void f(Callback callback) {
    System.out.println("Hello");
    callback.doCallback();
}
编辑:也可以使用,它允许您指定返回类型

然后声明f以获取此接口的实例:

public interface Callback {
    void doCallback();
}
public void f(Callback callback) {
    System.out.println("Hello");
    callback.doCallback();
}
并将此接口的实例传递给函数:

public void f(void Reference_to_other_func())
{
System.out.println("Hello");
Reference_to_other_func();//HERE I'M INVOKING 
}
f(new Callback() {
    public void doCallback() {
        f1();
    }
});
f(new Callback() {
    public void doCallback() {
        f2();
    }
});

正如您所看到的,除非您经常这样做,否则收益不会变得明显。

通过反射,您可以获得实际的方法对象,然后执行

public void f(Method m) { System.out.println("Hello"); m.invoke(this, null); }

通过反射,您可以得到实际的方法对象,然后执行

public void f(Method m) { System.out.println("Hello"); m.invoke(this, null); }

不幸的是,IMHO方法函数在java中不是一级对象,这意味着如果不先将其附加到类,就无法创建匿名或命名方法

例如,您可以实现一个只做一件事的类,比如Callable或Runnable

您可以创建一个匿名类,如下所示:

f(f1);
//in some other place
f(f2)
//etc.
    Runnable x = new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub

        }

    };   //<-- notice the semi-colon.
public void f( Runnable x ) {
   System.out.println("Hello");
   x.run();
}
}

这样称呼它

...
// call the f-function :-)
f( new Runnable(){
@Override
public void run() {
    System.out.println("World!");
    }   
}});   

不幸的是,IMHO方法函数在java中不是一级对象,这意味着如果不先将其附加到类,就无法创建匿名或命名方法

例如,您可以实现一个只做一件事的类,比如Callable或Runnable

您可以创建一个匿名类,如下所示:

f(f1);
//in some other place
f(f2)
//etc.
    Runnable x = new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub

        }

    };   //<-- notice the semi-colon.
public void f( Runnable x ) {
   System.out.println("Hello");
   x.run();
}
}

这样称呼它

...
// call the f-function :-)
f( new Runnable(){
@Override
public void run() {
    System.out.println("World!");
    }   
}});   

f1和f2必须在同一个班级吗?为什么要这样做?您可以传递对变量或对象的引用,也可以直接调用方法。你也可以尝试使用函数式语言,比如Haskell。f1和f2必须在同一个类中吗?为什么要这样做?您可以传递对变量或对象的引用,也可以直接调用方法。你也可以尝试使用函数式语言,比如Haskell。是的,但实际上获取方法对象是很长的一部分。是的,但实际上获取方法对象是很长的一部分。