Java:JDK8 新特性:Lambda表达式
文章目录
- Lambda
- 使用匿名内部类
- 分号
- 函数式匿名内部类
- 函数式接口:
- 代码
- 进一步简化Lambda表达式的写法
- 代码
Lambda
Lambda表达式是JDK8开始新增的一种语法形式,用于简化匿名内部类的写法。
注意:
Lambda表达式只是简化函数式接口的匿名内部类。(不是简化所有的匿名内部类)
函数式接口:首先是接口,其次接口内部有且只有一个抽象方法。
- 匿名内部类 : 便捷创建子类对象,abstract类的子类对象。
使用匿名内部类
分号
匿名内部类 :有分号
Lambda表达式:没有分号
函数式匿名内部类
注意:
Lambda表达式只是简化函数式接口的匿名内部类。(不是简化所有的匿名内部类)
函数式接口:
- 首先是接口,其次接口内部有且只有一个抽象方法。
- 有==@FunctionalInterface 注解==的接口一定是函数式接口(大部分函数式接口都有该注解)
代码
- 下面Animal不是函数式匿名内部类
- Swimming是接口式匿名内部类
简写前:
Lambda表达式简化后:
进一步简化Lambda表达式的写法
代码
package com.zhang.d6_lambda;
/**
* @Author: ggdpzhk
* @CreateTime: 2025-03-21
*/
public class LambdaTest1 {
public static void main(String[] args) {
/* Animal animal = new Animal() {
@Override
public void run() {
System.out.println("狗跑得很快");
}
};
//Animal animal = () -> {System.out.println("狗跑得很快");};//不是函数式接口的匿名内部类 Animal是个abstract类,不是接口
animal.run();*/
/*
Swimming sm = new Swimming() {
@Override
public void swim() {
System.out.println("小狗狗刨很快~~");
}
};//上面只是new了一个对象,重写了方法。但是如果不调用swim(),是不会输出狗刨的
*/
Swimming sm = () -> System.out.println("小狗狗刨很快~~");
sm.swim();
}
}
abstract class Animal{
public abstract void run();
}
interface Swimming{
void swim();
}