为什么name有String类型
test((String name) -> name+"正在游泳","李四");
如下代码直观理解
public class Test {
public static void main(String[] args) {
test(new Swim() {
@Override
public String whoSwimming(String name) {
return name+"正在游泳";
}
}, "张三"); //张三正在游泳
//Lambda
test((String name) -> name+"正在游泳","李四"); //李四正在游泳
test(name -> name+"正在游泳","王五"); //王五正在游泳
}
public static void test(Swim s,String name) {
System.out.println(s.whoSwimming(name));
}
}
@FunctionalInterface
interface Swim {
public abstract String whoSwimming(String name);
}
为什么上图name有类型String
1.Lambda函数中的参数可以省略类型,只有一个参数时可以省略括号,如下一行。
2.Lambda函数的本质是对匿名内部类的简写,省略了一些,剩下一些(如下红框部分)此时name当然有类型(String),即代表对接口的抽象方法whoSwimming(String name)
进行重新。