1.Lambda表达式使用条件:
- 方法参数类型必须为接口;
- 接口只有一个方法,默认实现除外(default);
- 如果接口中有Object类下的非默认方法除外,如:toString();
- 自定义接口如果要声明为函数式接口加@FunctionalInterface注解(也可不加);
2.Lambda表达式的三种编写方式:
- 单语句表达式:
- 语句块:
- 方法引用(包括:自身对象引用,构造方法引用,静态方法引用):
public class LambdaDemo{
@FunctionalInterface
public interface UserService{
String getUser(String id);
}
public static void proxyGetUser(UserService service){
String user = service.getUser("123");
System.out.println(user);
}
public static String proxyGetUser2(String id){
return id;
}
@Test
public void test(){
proxyGetUser(a->a);
proxyGetUser(a->{
return a;
});
proxyGetUser(String::toString);
proxyGetUser(id -> id.toString());
proxyGetUser(new UserService() {
@Override
public String getUser(String id) {
return id.toString();
}
});
proxyGetUser(String::new);
proxyGetUser(id -> new String(id));
proxyGetUser(new UserService() {
@Override
public String getUser(String id) {
return new String(id);
}
});
proxyGetUser(Test::proxyGetUser2);
proxyGetUser(id -> Test.proxyGetUser2(id));
proxyGetUser(new UserService() {
@Override
public String getUser(String id) {
return Test.proxyGetUser2(id);
}
});
}
}