文字列をメソッドとして実行することは可能ですか?
サーバーとクライアントがあるとしましょう。クライアントは"sayHello()"
文字列を送信します。クライアントがメソッドを持っている場合、クライアントはこの文字列をクライアント側のメソッドとして実行できますprivate void sayHello()
か?
文字列を特定の値と比較してメソッドを呼び出し、これに基づいて関数を呼び出すことができることはわかっています。しかし、私は上記のようなものを正確に調べています。
文字列をメソッドとして実行することは可能ですか?
サーバーとクライアントがあるとしましょう。クライアントは"sayHello()"
文字列を送信します。クライアントがメソッドを持っている場合、クライアントはこの文字列をクライアント側のメソッドとして実行できますprivate void sayHello()
か?
文字列を特定の値と比較してメソッドを呼び出し、これに基づいて関数を呼び出すことができることはわかっています。しかし、私は上記のようなものを正確に調べています。
これは、 Javaリフレクションに完全に一致するように聞こえます。ただし、Javaを使用してリモートメソッド呼び出しを実行するためのフレームワークは多数あり、車輪の再発明を行う可能性が高いことに注意してください。
JavaReflectionはそれを行うことができます。
また、記載されている要件にさらに固有のRemote Method Invocation(RMI)も確認してください。
リフレクションのコーディングはそれほど難しくありません。
public void invokeByName(String methName) {
try { getClass().getDeclaredMethod(methName).invoke(this); }
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
}
簡潔な例:
class Foo {
public static void main(String[] args) throws Exception {
String methodStr = "sayHello";
Foo foo = new Foo();
foo.getClass().getDeclaredMethod(methodStr).invoke(obj);
}
private void sayHello() {
System.out.println("hello stackoverflow!");
}
}
はい、を参照java.beans.Statement
してくださいjava.beans.Expression
。