Java8新特性 | 方法引用

简介: 本文讲解Java8中的新特性

方法引用

(一)体验方法引用

在这里插入图片描述

代码演示:

接口:

public interface Printable {
    void printString(String s);
}

测试类:

public class printableDemo {
    public static void main(String[] args) {
        usePrintable(s -> System.out.println(s));

        //方法引用符  ::
        usePrintable(System.out::println);
        //可推导的就是可省略的
    }

    public static void usePrintable(Printable p) {
        p.printString("我爱Java");
    }
}

(二)方法引用符

在这里插入图片描述

(三)Lambda表达式支持的方法引用

常见的引用方式:

  • 引用类方法
  • 引用对象的实例方法
  • 引用类的实例方法
  • 引用构造器

1.引用类方法

在这里插入图片描述

代码演示:

接口:

public interface Converter {
    int convert(String s);
}

测试类:

public class ConverterDemo {
    public static void main(String[] args) {
        //Lambda表达式
        useConverter((String s) -> {
            return Integer.parseInt(s);
        });
        //简写Lambda表达式
        useConverter(s -> Integer.parseInt(s));
        //方法引用
        useConverter(Integer::parseInt);
        //Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数
    }

    private static void useConverter(Converter c) {
        int number = c.convert("666");
        System.out.println(number);
    }
}

2.引用对象的实例方法

在这里插入图片描述

代码演示:

接口:

public interface Printer {
    void printUpperCase(String s);
}

类(PrintString):

public class PrintString {
    public void printUpper(String s) {
        String result = s.toUpperCase();
        System.out.println(result);
    }
}

测试类:

public class PrinterDemo {
    public static void main(String[] args) {
        //Lambda表达式
        usePrinter((s -> System.out.println(s.toUpperCase())));
        //方法引用
        PrintString p = new PrintString();
        usePrinter(p::printUpper);
        //Lambda表达式被对象的实例方法代替的时候,它的形式参数全部传递给该方法作为参数
    }

    private static void usePrinter(Printer p) {
        p.printUpperCase("HelloWorld");
    }
}

3.引用类的实例方法

在这里插入图片描述

代码演示:

接口:

public interface MyString {
    String mySubString(String s,int x,int y);
}

测试类:

public class MyStringDemo {
    public static void main(String[] args) {
        //Lambda表达式
        useMyString((String s,int x,int y) -> {
            return s.substring(x,y);
        });
        useMyString((s,x,y) -> s.substring(x,y));
        //方法引用
        useMyString(String::substring);
        //Lambda表达式被类的实例方法替代的时候
        //第一个参数作为调用者
        //后面的参数全部传递给该方法作为参数
    }

    private static void useMyString(MyString my) {
        String s = my.mySubString("helloWorld", 0, 5);
        System.out.println(s);
    }
}

4.引用构造器

定义学生类:

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

接口:

public interface StudentBuilder {
    Student build(String name,int age);
}

测试类:

public class StudentDemo {
    public static void main(String[] args) {
        //Lambda表达式
        useStudentBuilder((String name,int age) -> {
            Student s = new Student(name,age);
            return s;
        }) ;
        //简写Lambda表达式
        useStudentBuilder((name,age) -> new Student(name,age));

        //方法引用
        useStudentBuilder(Student::new);
    }

    private static void useStudentBuilder(StudentBuilder sb) {
        Student s = sb.build("小明", 20);
        System.out.println(s.getName() + ", " + s.getAge());
    }
}

目录
相关文章
|
12天前
|
Java
Java——方法的引用
方法引用允许将已有方法作为函数式接口的实现。使用“::”符号,需具备函数式接口,被引用的方法须存在且参数和返回值需与抽象方法一致。其分类包括:静态方法引用(类::方法名)、成员方法引用(对象::方法名、this::方法名、super::方法名)和构造方法引用(类名::new)。方法引用提高了代码的简洁性和可读性,减少了样板代码。
29 13
Java——方法的引用
|
8天前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
13 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
6天前
|
安全 Java API
java安全特性
java安全特性
20 8
|
4天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
14 4
|
7天前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
37 4
|
13天前
|
Java API
Java方法的优缺点
Java 方法是编程的基本构建块,具有代码重用性、模块化、易于调试、增强可读性、支持重载和可变参数、封装性及静态与实例方法的灵活性等优点,但也存在性能开销、过度抽象、限制使用环境、参数传递开销、命名冲突和堆栈溢出等缺点。合理设计方法可确保代码高效且易维护。
|
7天前
|
JavaScript 前端开发 Java
Java 8 新特性详解及应用示例
Java 8 新特性详解及应用示例
|
8天前
|
安全 Java
java调用方法
java调用方法
18 4
|
8天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。
|
13天前
|
Java
Java的方法详解
在 Java 中,方法是执行特定任务的代码块,包括定义、参数传递、返回值处理及重载等功能。
下一篇
无影云桌面