博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
方法引用
阅读量:5231 次
发布时间:2019-06-14

本文共 1868 字,大约阅读时间需要 6 分钟。

概述

  • 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。

  • 方法引用提供了一种引用而不执行方法的方式,它需要有兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。

  • 当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些。

  • 方法引用是一种更加紧凑、易懂的Lambda表达式,注意其中方法引用的操作符是双冒号“::”

方法引用

  • 对象::方法名

1 public class Employee { 2  3     private String name; 4     private String age; 5  6     public Employee() { 7         this.name = "hmz"; 8         this.age = "23"; 9     }10 11     public Employee(String name, String age) {12         this.name = name;13         this.age = age;14     }15 16     public String getName() {17         return name;18     }19 20     public void setName(String name) {21         this.name = name;22     }23 24     public String getAge() {25         return age;26     }27 28     public void setAge(String age) {29         this.age = age;30     }31 32     @Override33     public String toString() {34         return "Employee{" +35                 "name='" + name + '\'' +36                 ", age='" + age + '\'' +37                 '}';38     }39 40 }
1     public static void main(String[] args) {2         Employee employee = new Employee();3         Supplier
supplier2 = employee::getAge;4 String age = supplier2.get();5 System.out.println(age);6 }
  • 类::静态方法名

  • 类::实例方法名

  • Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致

  • 若Lambda参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method

 1 BiPredicate<String, String> bp = (x, y) -> x.equals(y); 2 BiPredicate<String, String> bp2 = String::equals; 

构造器引用

  • ClassName::new

BiFunction
bf = Employee::new;Employee employee = bf.apply("www", "22");System.out.println(employee);

 

  • 需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致

数组引用

  • Type::new

 1 Function<Integer, String[]> function = String[]::new; 2 String[] strings = function.apply(10); 3 System.out.println(strings.length); 

转载于:https://www.cnblogs.com/HNewa/p/Java_Method_Reference.html

你可能感兴趣的文章
挑战黑客极限:Pwn2Own 2015成史上“最难”黑客大赛
查看>>
javascript 的继承
查看>>
判断是否是微信浏览器的函数
查看>>
图像处理04
查看>>
SSH在MyEclipse 8.5下整合详细步骤 (Struts2.1+Spring3.0+Hibernate3.3)
查看>>
【生病要吃对水果】
查看>>
(转)Kettle命令行
查看>>
本地Eclipse连接HDFS进行简单的文件操作
查看>>
Uiautomator简介及其环境搭建、测试执行
查看>>
tomcat简单使用
查看>>
cnblogs 开通第一日
查看>>
RabbitMQ主题模式
查看>>
linearlayout水平靠右显示方法
查看>>
线程安全相关及ConcurrentHashMap总结
查看>>
ios native工程集成react-native的demo
查看>>
使用word时在方块中打钩
查看>>
1007 素数对猜想
查看>>
Nginx动静分离
查看>>
网络空间安全概论1、4单元笔记
查看>>
shop--10.商品--商品管理(前端)
查看>>