Java-方法引用

一、初见方法引用

考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那么是否还有必要再写重复逻辑呢?

答案是没有必要

所以要是用方法引用来使用已经存在的方案

二、方法引用符

  • :: 符号为引用运算符,而它所在的表达式被称为方法引用

回顾上面的代码

  • Lambda表达式:

usePrintable(s->System.out.println(s));

分析:拿到参数s之后通过Lambda表达式,传递给System.out.println方法去处理,即把参数s进行输出

  • 方法引用:

usePrintable(System.out::println)

分析:直接使用System.out中的println方法来取代Lambda,代码更加简洁

三、推导与省略

  • 如果使用Lambda,那么根据“可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
  • 如果使用方法引用,也是同样可以根据上下文进行推导
  • 方法引用是Lambda的孪生兄弟

四、Lambda表达式支持的方法引用

4.0 常见的引用方式:

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

4.1 引用类方法

其实就是引用类的静态方法

  • 格式:类名::静态方法
  • 范例: Integer::parseInt

Integer类的方法:public satcic int parseInt(String s)将此String转换为int类型数据

练习:

4.2 引用对象的实例方法

其实就是引用类中的成员方法

  • 格式:对象::成员方法
  • 范例:“HelloWorld”::toUpperCase

String类中的方法:public String toUpperCase()将此String所有字符串转换为大写

4.3 引用类的实例方法

其实就是引用类中的成员方法

  • 格式:类名::成员方法
  • 范例:String::substring

String类中的方法:public String substring(int beginIndex,int endIndex)

从beginIndex开始到endIndex结束,截取字符串,返回一个子串,子串的长度为endIndex-beginIndex

4.4 引用构造器

其实就是引用构造方法

  • 格式:类名::new

  • 范例:Student::new

请我喝杯咖啡吧~

支付宝
微信