メソッドにメソッドを渡す方法について教えてください


自身で定義したメソッドを別のメソッドに引数として渡す方法についてご教示いただきたいです。  
例えばBookServiceのgetBookメソッドに、呼び出し元のクラスで定義したfallbackメソッドを渡し、getBookメソッドの中で実行する方法はないでしょうか。  
よろしくお願いいたします。

追記：  
情報が欠落していましたので、追記させていだきます。  
fallbackメソッドは引数無し、戻り値として空のbookオブジェクトを返却する仕様を考えています。




  1. fallbackメソッドを持つFooBase抽象クラスを定義します
  2. getBookの引数は、FooBase抽象クラスにします
  3. getBookの中で、fooBase.fallbackメソッドを呼びます。
  4. FooBaseを継承したSubFooクラスを作り、SubFoo.fallbackをオーバーライドして任意の処理を書きます

・FooBase抽象クラスより、Fooインターフェースのほうがいいかもしれません。  
・Javaには匿名クラスの文法があるので、SubFooクラスを定義することなく直接getBookに匿名クラスを渡すこともできます。




Java 8以降であれば、メソッド参照が使えるので、ご質問に書かれたような動作を比較的「直接」記述することができます。

### BookServiceのgetBookメソッド

[code]

    public class BookService {
    
        public BookService() {
            //...
        }
    
        public void getBook(Runnable callback) {
            //...
            //`callback`を呼び出す
            callback.run();
            //...
        }
    
    }
    
[/code]

`callback`が引数を取るかどうか、戻り値を返すかどうかで`Runnable`なんかの型や呼び出し方(`get()`だったり`apply(...)`だったり)も変えないといけませんが、特にご記載はないので、ここでは引数も戻り値も無しにしています。

### 呼び出し側

[code]

    public class CallbackSample {
    
        public static void main(String[] args) {
            BookService service = new BookService();
            service.getBook(CallbackSample::fallback); //<-fallbackメソッドのメソッド参照を渡す
        }
    
        public static void fallback() {
            System.out.println("fallback called");
            //...
        }
    }
    
[/code]

