lambda表达式
interface Eatable { void taste(); } interface Flyable { void fly(String weather); } interface Addable { int add(int a , int b); } public class LambdaQs { public void eat(Eatable e) // 调用该方法需要形参是Eatable对象 { System.out.println("打印的是Eatable对象的toString:"+e); e.taste(); } public void drive(Flyable f) // 调用该方法需要形参是Flyable对象 { System.out.println("打印的是Flyable对象的toString:" + f); f.fly("雨"); } public void test(Addable add) // 调用该方法需要形参是Addable对象 { System.out.println("5与3的和为:" + add.add(5, 3)); } public static void main(String[] args) { LambdaQs lq = new LambdaQs(); lq.eat( ( )-> //形参类型可以省略,这里只有() 相当于无形参。 {System.out.println("苹果味道不错");} ); // Lambda表达式的代码块只有一条语句, //可以省略花括号。他相当于的匿名内部类如下 /* lq.eat( * new Eatable() * { * @Override * public void taste() * { * System.out.println("苹果闻到不错"); * } * } * ); */ lq.drive(weather -> // Lambda表达式的形参列表只有一个形参,省略圆括号。形参类型可以省略。 { //其相当的你蒙内部类如下。 System.out.println("今天天气是:" + weather); System.out.println("代码块第二条语句"); }); /* lq.drive( new Flyable() { @Override public void fly(String weather) { System.out.println("今天天气是:" + weather); System.out.println("代码块第二条语句"); } } ); */ //代码块只有一条语句 可以省略花括号。省略形参类型。连return语句也可以省略。 lq.test((a , b)->a + b); //匿名内部类如下。 /* lq.test( new Addable() { @Override public int add(int a,int b) { return a+b; } } ); */ } }