Lambda表达式简化匿名内部类
Posted JunMain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lambda表达式简化匿名内部类相关的知识,希望对你有一定的参考价值。
Lambda表达式
作用
我们之前已经看到了,当我们用匿名内部类的时候,Idea给我们提示,让我们用Lambda表达式简化匿名内部类,所以Lambda
表达式的出现是为了简化匿名内部类,那么什么样的匿名内部类才能用Lambda表达式简化呢?
- 匿名内部类必须是实现的接口
- 该接口中只有一个抽象方法
形式:
注意我们参数的类型可以不写,JVM可以通过上下文“类型推断”
(参数1,参数2,····) -> {
//todo, 实现接口的方法体
};
//注意:当参数只有一个的()可以不写,
参数1 -> {
//todo
};
//注意:当实现的方法只有一个语句的时候, return和{}可以省略不写
(参数1,参数2,····) -> //todo ;
例子
举一个例子,我们把之前匿名内部类实现接口的那个例子用Lambda表达式替换
IStudent接口
public interface IStudent {
default void say(){
System.out.println("我是一个从不翘课的学生,嘿嘿");
}
void study(); //接口的函数默认的修饰符 是public abstract
}
测试类
import org.junit.Test;
public class testLambda {
@Test
//Lambda表达式实现
public void test01(){
IStudent iStudent = () ->
System.out.println("我在学校Lambda表达式");
iStudent.say();
iStudent.study();
}
//匿名内部类实现
@Test
public void testImplementsInterface(){
//多态向上转型
IStudent student = new IStudent() {
@Override
public void study() {
System.out.println("我在天天摸鱼的时候学习");
}
};
student.say();
student.study();
}
}
我们发现Lambda表达式确实简化了很多。
两个参数的
public interface IFather {
void say(int age, int weight);
}
测试类
@Test
public void test02(){
IFather iFather = (age, weight) ->
System.out.println("年龄:" + age + " "+ "体重:" +weight);
iFather.say(25, 75);
}
总结
Lambda表达式其实就是在于方法体,把目光集中于方法体的具体实现,我们调用的时候直接调用抽象的接口即可。
以上是关于Lambda表达式简化匿名内部类的主要内容,如果未能解决你的问题,请参考以下文章
为什么匿名内部类可以实例化并实现抽象方法?lambda表达式是简化了匿名内部类的实现过程吗?