Java8 方法引用

概述

方法引用是用来直接访问类或实例阴茎存在的方法或者构造方法.它须要由兼容的函数式接口(lambda表达式中用到的接口)构成的目标类型上下文. 有时候, 当咱们想要实现一个函数式接口的方法, 可是已经由类实现了咱们想要的功能, 这时能够使用方法引用来直接使用现有的功能实现.html

关于lambda表达式能够看这篇文章Java8 Lambda表达式
数组

当lambda表达式只是执行一个方法调用时, 直接经过方法引用的形式调用. 方法引用是一种更简洁的lambda表达式.函数

方法引用是lambda表达式的简写, 提升了代码可读性. 能够看出来, 方法引用就是用已经实现的方法来实现lambda表达式中的实现, 因此引用的方法要知足如下要求:this

  1. 引用的方法的参数列表必须与实现的抽象方法参数列表保持一致.

使用

由于方法引用是简写的lambda表达式, 因此类比便可.htm

方法引用的语法为:对象

类或对象名::方法名或new

经过引用便可引用指定类或对象的指定方法blog

分类

下面介绍如下几种不一样的方法引用.接口

1.静态方法引用get

顾名思义, 静态方法引用就是引用类的静态方法, 语法为:io

类名::静态方法名

方法引用与lambda表达式:

String::valueOf 等价于 s -> String.valueOf(s);
Math::pow 等价于 (x,y) -> Math.pow(x,y);
Java8 方法引用

 

2.实例方法引用

顾名思义,实例方法引用就是引用对象实例的方法, 语法为:

对象实例::方法名

方法引用与lambda表达式:

String str = "aaaaaaaaaaa";
// 若实例方法要经过对象来调用, 第一个参数会成为调用实例方法的对象, 后面的参数为调用方法的参数
String::length 等价于lambda表达式 s -> s.length();
String::equals 等价于lambda表达式 (s1,s2) -> s1.equals(s2);
// 若实例方法为this或super, 参数会成为调用方法的参数
this::equals 等价于lambda表达式 s -> this.equals(s);
super::equals 等价于lambda表达式 s -> super.equals(s);
Java8 方法引用

 

3.构造方法引用

顾名思义, 构造方法引用就是引用类的构造方法, 语法为:

类名::new

方法引用与lambda表达式:

// 会根据参数寻找合适的构造方法
String::new 等价于lambda表达式 s->new String(s);
也等价于 ()->new String();
// 同时也能够建立数组
int[]::new 等价于lambda表达式 x->new int[x];
Java8 方法引用

 


关于方法引用的更多能够本身进行尝试

相关文章
相关标签/搜索