Java函数作为参数

Java函数作为参数,java,Java,我正在尝试将按键事件添加到我的库中,那么是否可以将函数作为参数传递给库的某个类,然后在库需要启动该函数时 例如: Library lib = new Library(); lib.myAction(function(){ // Do some java stuff here }); 因此,当我的库看到某些事情发生时,例如按键,它将启动该功能。如果你使用过JavaScript,你就可以做到这一点(在jQuery中非常常见),我希望在Java中也能达到同样的效果。不,Java中没有直接的等

我正在尝试将按键事件添加到我的库中,那么是否可以将函数作为参数传递给库的某个类,然后在库需要启动该函数时

例如:

Library lib = new Library();
lib.myAction(function(){
    // Do some java stuff here
});

因此,当我的库看到某些事情发生时,例如按键,它将启动该功能。如果你使用过JavaScript,你就可以做到这一点(在jQuery中非常常见),我希望在Java中也能达到同样的效果。

不,Java中没有直接的等价物。最接近的方法是拥有一个接口或抽象类,然后使用匿名内部类来实现/扩展它:

lib.myAction(new Runnable() {
    @Override public void run() {
        // Do something here
    }
});

Java 8应该让这变得更简单。

在Java中没有简单的方法。但是,您可以将Method对象(该方法必须是静态的)传递给myAction函数,并在其中调用传递的方法,如下所示:

public Object myAction(Method m, Object... args) {
    return m.invoke(args);
}
lib.myAction(A.class.getMethod("sampleMethod", String.class), "Value of parameter s");
请注意,args参数是传递的方法的参数列表

例如,假设您在a中定义了一个类a和一个静态方法sampleMethod(字符串s)。您可以按如下方式调用myAction方法:

public Object myAction(Method m, Object... args) {
    return m.invoke(args);
}
lib.myAction(A.class.getMethod("sampleMethod", String.class), "Value of parameter s");
如果sampleMethod是无参数的,则可以忽略第二个参数:

lib.myAction(A.class.getMethod("sampleMethod", String.class));

也许您可以创建一个表示每个
函数()的
enum
,然后传递它?现在在Java中处理它的方法(JDK8中没有lambda)是实现
命令
策略
设计模式我们都希望在下一个Java版本中实现这些功能,无论何时。