我试图了解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吗?

最佳答案

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

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

07-27 17:59