- 为什么使用方法引用
方法引用可以让你重复使用现有的方法定义,并像Lambda一样传递他们。在某些情况下,比起使用Lambda表达式,他们更易读。方法引用可以被看作仅仅调用特定方法的Lambda的一种快捷写法。方法引用就是根据已有的方法实现来创建Lambda表达式,但是,显示地指明方法的名称,这样使得代码的可读性更高。 - 使用场景
如果一个Lambda表达式代表的只是“调用某一方法”,那么就可以适用方法引用。 - 方法引用格式
目标引用 :: 方法名称 - 方法引用构建:编译器会进行一个与Lambda表达式类似的类型检查过程,来确定对于给定的函数式接口,这个方法引用是否有效:方法引用的签名必须和上下文类型匹配
- 指向静态方法的方法引用
// Lambda Function<String,Integer> stringIntegerFunction = (String s)->Integer.parseInt(s); // 方法引用 stringIntegerFunction = Integer :: parseInt;
- 指向任意类型实例方法的方法引用
stringIntegerFunction = (String s) -> s.length(); stringIntegerFunction = String::length;
- 指向现有对象的实例方法的方法引用
Orange orange = new Orange(); orange.setWeight(10.34); Supplier<Double> supplier = ()->orange.getWeight(); supplier = orange :: getWeight;
- 构造函数引用
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public class Orange { @NonNull private Double weight; private String color; } //无参构造函数 Supplier<Orange> supplierConstructor = ()->new Orange(); Orange orangeConstructor = supplierConstructor.get(); supplierConstructor = Orange::new; orangeConstructor = supplierConstructor.get(); //一个参数 Function<Double,Orange> functionConstructor = Orange::new; orangeConstructor = functionConstructor.apply(10.00); functionConstructor = (weight)-> new Orange(weight); orangeConstructor = functionConstructor.apply(10.00); //2个参数 BiFunction<Double,String,Orange> biFunctionConstructor = Orange::new; orangeConstructor = biFunctionConstructor.apply(10.00,"red" ); biFunctionConstructor = (weight,color)->new Orange(weight,color); orangeConstructor = biFunctionConstructor.apply(10.00,"red" ); //超过二个参数的可自定义函数接口 @FunctionalInterface public interface BiiFunction<T,U,K,R> { R apply(T t,U u,K k); }
- 指向静态方法的方法引用
Java8之方法引用
最新推荐文章于 2025-07-13 03:48:18 发布