如何将用于交换参数的Lambda转换为方法

时间:2019-07-29 18:12:40

标签: java

我试图了解lambda是如何工作的。在这个过程中,我找到了这个例子。

public class Calculator {
   interface IntegerMath {
      int operation(int a, int b);

      default IntegerMath swap() {
         return (a, b) -> operation(b, a);
      }
   }

   private static int apply(int a, int b, IntegerMath op) {
      return op.operation(a, b);
   }

   public static void main(String[] args) {
      IntegerMath addition =  (a, b) -> a + b;
      Math subtraction = (a, b) -> a - b;

      System.out.println(apply(5, 10, subtraction));
      System.out.println(apply(5, 10, subtraction.swap()));
   }
}

我正在尝试将交换方法的实现从lambda转换为普通方法。

但是我不能改变它,因为如果这样做,我应该编写操作方法的实现并创建一个无限递归。

public class Calculator {
   interface IntegerMath {
      int operation(int a, int b);

      default IntegerMath swap() {
         return new IntegerMath() {
            @Override
            public int operation(int a, int b) {
               return operation(b, a);
            }
         };
      }
   }
}

我不能在接口IntegerMath中的交换方法中使用lambda吗?

1 个答案:

答案 0 :(得分:2)

如果您要问如何从匿名实现中调用外部operation(),则可以这样做:

return IntegerMath.this.operation(b, a);