非静的メソッドの場合、そのオブジェクトが必要です。それ以外の場合、この所有者は 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