赞
踩
目录
在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作
那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑呢?
那我们有事如何使用已经存在的方案呢?
这就是我们要讲解的方法引用,我们是通过方法引用来使用已经存在的方案
实例:
- public class PrintableTest {
- public static void main(String[] args) {
- usePrintable(s -> System.out.println(s));
-
- //方法引用符
- usePrintable(System.out::println);
- //可推导的就是可省略的
- }
-
- private static void usePrintable(Printable p) {
- p.printString("好好学习,天天向上!");
- }
- }
方法引用符
回顾一下我们在体验方法引用中的代码
分析:拿到参数s之后通过Lambda表达式,传递给System.out.println方法去处理
分析:直接使用System.out中的println方法来取代Lambda,代码更加的简洁
推导与省略
实例:
- public class PrintableTest {
- public static void main(String[] args) {
- usePrintable(i -> System.out.println(i));
-
- //方法引用
- usePrintable(System.out::println);
- }
-
- private static void usePrintable(Printable p) {
- p.printInt(666);
- }
- }
常见的引用方式:
引用类方法,其实就是引用类的静态方法
Integer类的方法:public static int parseInt(String s)将此String转换为int类型数据
练习:
int concert(String s);
一个方法是:useConverter(Converter c)
一个方法是主方法,在主方法中调用useConverter()方法
实例:
- public class ConverterTest {
- public static void main(String[] args) {
- useConverter(s -> Integer.parseInt(s));
-
- //引用类方法
- useConverter(Integer::parseInt);
- }
-
- private static void useConverter(Converter c) {
- int number = c.convert("666");
- System.out.println(number);
- }
- }
引用对象的实例方法,其实就是引用类中的成员变量
String类中的方法:public String toUpperCase()将此String所有字符转换为大写
练习:
public void printUpper(String s):把字符串参数变成大写的数据,然后在控制台输出
void printUpperCase(String s)
一个方法是:usePrinter(Printer p)
一个方法是主方法,在主方法中调用usePrinter方法
实例:
- public class PrinterTest {
- public static void main(String[] args) {
- usePrinter(s -> System.out.println(s.toUpperCase()));
-
- //引用对象的实例方法
- PrintString ps = new PrintString();
- usePrinter(ps::printUpper);
-
- //Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数
- }
-
- private static void usePrinter(Printer p) {
- p.printUpperCase("hello,world!");
- }
- }
引用类的实例方法,其实就是引用类中的成员方法
格式:类名::成员方法
范例:String::substring
练习
String mySubString(String s,int x,int y)
一个方法是:useMyString(MyString my)
一个方法主方法,在主方法中调用useMyString方法
实例:
- public class MyStringTest {
- public static void main(String[] args) {
- // 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("hello,world!", 2, 5);
- System.out.println(s);
- }
- }

引用构造器,其实就是引用构造方法
格式:类名::new
范例:Student::new
练习:
一个方法是:useStudentBuilder(StudentBuilder s)
一个方法主方法,在主方法中调用useStudentBuilder方法
实例:
- public class StudentTest {
- public static void main(String[] args) {
- useStudentBuilder((String name,int age) -> {
- return new Student(name,age);
- });
-
- useStudentBuilder(Student::new);
-
- //Lambda表达式被构造器替代的时候,它的形式参数全部传递个构造器作为参数
- }
-
- private static void useStudentBuilder(StudentBuilder s) {
- Student stu = s.build("周星驰", 56);
- System.out.println(stu.getName() + stu.getAge());
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。