最近节日
正在加载日历...----
lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!

JDK8之后,java支持了lambda表达式这个特性.
lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!
lambda表达式是编译器认可的,最终会将其改为内部类编译到class文件中
代码案例
package lambda;import java.io.File;import java.io.FileFilter;/** * @author 老安 * @data 2022/7/1 20:58 * JDK8之后推出了一个新的特性:lambda表达式 * lambda表达式可以用更精简的方式创建匿名内部类 * 语法: * (参数列表)->{ * 方法体 * } * 不是所有的匿名内部类创建的情景都可以替换为lambda表达式,只有实现的接口内部只能有一个抽象方法时,才可以使用lambda表达式 */public class LambdaDemo { public static void main(String[] args) { //匿名内部类 FileFilter filter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().contains("o"); } }; //可以忽略接口名(new FileFilter)和方法名(public boolean accept(){}) //将方法的参数声明放在接口括号中,然后用->符号连接{} //忽略接口名:因为声明时FileFilter filter1,已经表明要实例化的对象了 //忽略方法名:因为lambda表达式支持的接口只允许有一个抽象方法 FileFilter filter1 = (File pathname) -> { return pathname.getName().contains("o"); }; //可以忽略参数类型(File) //因为只有一个方法,方法的参数顺序已经固定,所以参数无序表明类型 FileFilter filter2 = (pathname) -> { return pathname.getName().contains("o"); }; //如果方法只有一个参数时,()可以省略 FileFilter filter3 = pathname -> { return pathname.getName().contains("o"); }; //如果方法体只有一句代码时,那么可以将方法体的"{}"省略,如果含有return,则return要一同忽略 FileFilter filter4 = pathname -> pathname.getName().contains("o"); File file = new File("."); File[] files = file.listFiles(pathname -> pathname.getName().contains("o")); for (int i = 0; i < files.length; i++) { System.out.println(files[i]); } }}