任何一个接口,如果它只包含一个抽象方法,那么他就是函数式接口;
对于函数式接口,我们就可以通过Lambda表达式来创建该接口的对象
首先对于Lambda的推导
1:定义接口->实现类->静态内部类->局部内部类->匿名内部类->Lambda表达式
(接口)Interface->(){
函数体
}
实现代码:
package com.itheima.mp;
public class LambdaStudy {
//3:静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
Like like = new Like();
like.lambda();
Like2 like2 = new Like2();
like2.lambda();
new Like2().lambda();
//4:局部内部类
class Like3 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
new Like3().lambda();
//5:匿名内部类,没有类的名称,必须借助接口或者父类
Ilike Ilike = new Ilike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
Ilike.lambda();
//用Lambda表达式,Ilike是必须一个接口
Ilike =()-> {
System.out.println("i like lambda5");
};
like.lambda();
}
}
//1;有一个函数式接口(一个接口里面只有一个函数的接口叫哈数式接口)
interface Ilike{
void lambda();
}
//2:实现类
class Like implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda1");
}
}
Lambda表达式简化:
上代码:
package com.itheima.mp;
public class LambdaSimplify {
public static void main(String[] args) {
// Love1 love1 = new Love1();
// love1.love("董舒心");
//对其进行简化
// String me="fyc";
//简化1:
// Love love=(String name)->{
// System.out.println("I am love you"+name);
//
// };
// love.love("付永闯");
// }
//简化2:(去掉参数类型)
// Love love=(name)->{
// System.out.println("I am love you"+name);
// };
// love.love("付永闯");
// }
//简化3:(去掉参数括号)
// Love love= name->{
// System.out.println("I am love you"+name);
// };
//简化4(去掉花括号):
Love love=name -> System.out.println("I love you"+name);
love.love("付永闯");
//总结:Lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就要用花括号括起来
//前提必须是函数式接口(接口中只有一个方法称为函数式接口)
//多个参数也可以去掉参数类型,要去掉就都去掉,而且必须加括号
}
}
interface Love{
void love(String name);
}
//class Love1 implements Love{
//
// public void love(String name){
// System.out.println("I am love you"+name);
// }
//}
总结:Lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就要用花括号括起来
前提必须是函数式接口(接口中只有一个方法称为函数式接口)
多个参数也可以去掉参数类型,要去掉就都去掉,而且必须加括号