Java では、関数はファースト クラスの概念ではありません (まだ、Java 8 で導入されています)。そのため、関数型の概念を持つ他の多くの言語のようにメソッドを渡すことはできません。
代わりに、インターフェイスを宣言し、匿名の内部クラスを使用して実装する必要があります。例えば
インターフェイス
interface MyGetter {
Object doGet();
}
チェック方法
boolean checkValue(MyGetter getter, Object value) {
return getter.doGet().equals(value);
}
呼び出し
checkValue(new MyGetter() {
public Object doGet() {
return obj.getLevelOne().getLevelTwo().getValue();
}
}, 5);
呼び出しで実際に行っていることは、新しいクラスとその型のオブジェクトを作成して、必要な実際の呼び出しを行うことです。
編集:
異なる戻り値の型が必要な場合は、インターフェイスを作成してメソッドをジェネリックにすることができます。
インターフェイス
interface MyGetter<T> {
T doGet();
}
チェック方法
<T> boolean checkValue(MyGetter<? extends T> getter, T value) {
return getter.doGet().equals(value);
}
呼び出し
checkValue(new MyGetter<SomeClass>() {
public SomeClass doGet() {
return obj.getLevelOne().getLevelTwo().getValue();
}
}, 5);