2

ライブラリにキー押下イベントを追加しようとしていますが、ライブラリのクラスの1つにパラメーターとして関数を渡すことは可能ですか?その後、ライブラリがその関数を起動する必要がある場合はどうなりますか?

例:

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
    }
});

これは、Java8のラムダ式のサポートによってはるかに簡単になるはずです。

于 2012-12-23T20:52:17.073 に答える
0

Javaでこれを行う簡単な方法はありません。ただし、次のように、Methodオブジェクト(メソッドは静的である必要があります)をmyAction関数に渡して、渡されたメソッドを呼び出すことができます。

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

argsパラメーターは、渡されたメソッドのパラメーターリストであることに注意してください。

たとえば、クラスAと静的メソッドsampleMethod(String s)がAで定義されているとします。myActionメソッドは次のように呼び出すことができます。

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

sampleMethodにパラメーターがない場合は、2番目のパラメーターを省略できます。

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