lambda 的方法引用 实质也是建立在把引用方法的代码段简写成lambda表达式
分为以下几种:
1、引用静态方法
首先得有个静态方法
写成静态方法是因为 main主方法用类名调用时只会调用静态方法
h -> Test.test(h) —— h为变量名具体类型自定义 Test示例类名 引用静态方法test 放入参数h
也可写成 Test::test
依据情况而言 有的时候方法里直接放lambda表达式即可 以上只作为介绍引用静态方法将其核心语句写入静态方法并返回。
2、引用对象方法
建立在对该类进行实例化对象 利用对象调用 h -> Test.test(h) 将Test改为自定义的对象名
Test::test 随之做出更改
3、引用容器中的对象的方法
实质就是以上所介绍的 集合只不过有多个该类的对象(前提使用了泛型)
在操作的时候要细化到每一个对象
因此 在该类就写一个静态方法 之后的操作就同上所述
4、引用构造器
建立在有的接口中的方法会返回一个对象,比如java.util.function.Supplier提供
了一个get方法,返回一个对象。
这时 设计一个方法 来对其调用 参数是这个接口
具体的接口:
public interface Supplier<T> {
T get();
}
设计方法实现:
public static List getList(Supplier<List> s){
return s.get();
}
那么调用方式有三种:
第一种匿名类:
Supplier<List> s = new Supplier<List>() {
public List get() {
return new ArrayList();//相当于实现了接口方法
}
};
List list1 = getList(s);
以下lambda表达式可根据 匿名类的内容 化简得出
List list2=getList(()->new ArrayList());//无变量是因为该方法get是无参
因为List get() 本就是无参方法在把匿名类缩减成lambda表达式的时候按照其步骤 缩减只剩() 无参必须保留括号
如果括号里只有一个参数可以把括号去掉 两个参数则不可以
第三种写法:
List list3=getList(ArrayList::new);
强调:
只是针对某些匿名类可以缩减成lambda表达式的形式 lambda表达式的运用只是为了减少代码量 它的存在可以说是充分不必要 你觉得哪些情况下的代码可以缩减成lambda表达式 就可以尝试