使用函数式编程用单一方法替换多个方法

Replacing multiple methods with single methods using functional programming

我有一个包含这样例程的代码(实际代码库非常广泛,但我提供了一个最小版本来解释它)

class TestClass {
    void anotherRoutine2(){
      //some code logic
    }
    
    void someOtherRoutine2(){
      //some code logic
    }
    
    void method1() {
      routine1();
      anotherRoutine2();
      routine3();
    }

    void method2() {
      routine1();
      someOtherRoutine2();
      routine3();
    }

    public static void main(String[] args) {
      TestClass object1 = new TestClass();
      object1.method1();
      object1.method2();
    }
}

所以我们可以看到 method1 和 method2 的唯一区别是 method1 调用了 anotherRoutine2 而 method2 调用了 someOtherRoutine2。

我正在尝试在这种情况下使用函数式编程,因此我想组合 method1 和 method2,以便将更改的例程作为参数传递。所以我打算做以下事情

class TestClass {
    void anotherRoutine2(){
      //some code logic
    }
    
    void someOtherRoutine2(){
      //some code logic
    }

    void newMethod(Runnable methodName) {
      routine1();
      methodName.run();
      routine3();
    }

    public static void main(String[] args) {
      TestClass object1 = new TestClass();
      object1.method1(()->object1.anotherRoutine2());
      object1.method2(()->object1.someOtherRoutine2());
    }
}

有没有更好的方法解决这个问题?

docs 建议制作 class implements runnable

class TestClass {
    class anotherRoutine2 implements runnable{
      void run(){
          //some code logic
      }
    }

    void someOtherRoutine2 implements runnable{
      void run(){
          //some code logic
      }
    }

     void newMethod(Runnable methodName) {
       routine1();
       methodName.run();
       routine3();
     }

      public static void main(String[] args) {
      TestClass object1 = new TestClass();
      object1.newMethod(new object1.anotherRoutine2());
      object1.newMethod(new object1.someOtherRoutine2());
    }
}

你有一些错别字(应该是 newMethod),但你可以这样做。或者使用方法参考如下:

TestClass object1 = new TestClass();
object1.newMethod(object1::anotherRoutine2);
object1.newMethod(object1::someOtherRoutine2);