2

我正在尝试将按键事件添加到我的库中,因此是否可以将函数作为参数传递给我的库的一个类,然后当我的库需要触发该函数时?

例子:

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

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

4

2 回答 2

7

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

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

这应该通过 Java 8 的lambda 表达式支持变得更简单。

于 2012-12-23T20:52:17.073 回答
0

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

public Object myAction(Method m, Object... args) {
    return m.invoke(args);
}

注意args参数是传递方法的参数列表。

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

lib.myAction(A.class.getMethod("sampleMethod", String.class), "Value of parameter s");

如果您的sampleMethod是无参数的,那么您可以省略第二个参数:

lib.myAction(A.class.getMethod("sampleMethod", String.class));
于 2012-12-23T21:36:58.277 回答