一投的表达提供了一种机制,以明确提供 lambda表达式的类型,如果没有可以从上下文推断方便。当方法声明因不相关的功能接口类型而过载时,解决歧义也很有用。
Object o = () -> { System.out.println("nhooo"); }; //非法: Object o = (Runnable) () -> { System.out.println("nhooo"); }; // Legal
interface Algebra1 { int operate(int a, int b); } interface Algebra2 { int operate(int a, int b); } public class LambdaCastingTest { public static void main(String[] args) { printResult((Algebra1)(a, b) -> a + b); // Cast Expression in Lambda printResult((Algebra2)(a, b) -> a * b); // Cast Expression in Lambda } static void printResult(Algebra1 a) { System.out.println("From Algebra1 Interface: " + a.operate(40, 20)); } static void printResult(Algebra2 a) { System.out.println("From Algebra2 Interface: " + a.operate(40, 20)); } }
输出结果
From Algebra1 Interface: 60 From Algebra2 Interface: 800