0

わかりました、これは何百回も質問されて回答されていることを知っています。おそらく「答えを検索してください」という応答が返ってくることはわかっていますが、とにかく質問してみます非常に簡単に言えば、メソッドを渡し、それを使用して文字列を書き込みたいのです。例えば:

void writeStuff(Method method) {
    method.invoke("the string to write");
}

このようにして、文字列を受け取るメソッド (System.out.print や LOGGER.info など) を渡すことができます。一体、文字列をとして受け入れるメソッドがないのはなぜですか

4

3 に答える 3

1

非静的メソッドの場合、そのオブジェクトが必要です。それ以外の場合、この所有者は null になる可能性があります。そして、処理する例外があります。

void writeStuff(Object owner, Method method) {
    method.invoke(owner, "the string to write");
}

したがって、Java の次のバージョンまでは、(1 つのメソッドで) インターフェイスを使用し、これらのインスタンスを渡します。

interface Printable { void print(String s); }

void writeStuff(Printable p) {
    p.print("...");
});

writeStuff(new Printable() {
    @Override public void print(String s) { System.out.println(s); }
});

静的メソッド、関数の場合、実際にはthis(所有者) は必要ありません。Algol68 (1968 年ですが、まだアクティブです!) のような最上位の究極の言語では、次のことができます。

REAL y = IF c THEN sin ELSE cos FI (x);

sin と cos は、PROC(REAL)REAL 型のコード値の名前です。

Java では、フィールドとメソッドを残念ながら区別しています。同じ名前のオーバーロードされたメソッドを持つフィールドint xとメソッドを持つことができます。関数オブジェクトのようなものには、決して使用できません。void x(boolean)boolean x()System.out.println

于 2012-10-25T15:54:43.050 に答える
0

invoke のドキュメントを読みましたか?

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object , java.lang.Object[])

于 2012-10-25T15:50:24.727 に答える
0

メソッドを呼び出すオブジェクトも指定する必要があります。

実際、これは一般的な情報源から読むことができます。

呼び出し用の Javadoc API 1.7

メソッドの呼び出しに関する Sun/Oracle チュートリアル

--tb

于 2012-10-25T15:51:52.147 に答える