Java8函数式编程-----方法引用

方法引用

方法引用是Java8中提出的用来简化Lambda表达式的一种手段,它通过类名和方法名来定位一个静态方法或者实例方法。方法引用使用"::"定义,"::"的前半部分表示类名或者实例名,后半部分表示方法名称,如果是构造器函数,则使用new表示。

1、静态方法引用:ClassName::methodName

 
  1. List<String> strs = Arrays.asList("aa","bb","cc");
  2. strs.forEach(System.out::println);

输出结果:

query

2、实例方法引用:instanceRefence::methodName

 
  1. class Printer {
  2.  
  3. void print(){
  4. System.out.println("instanceRefence::methodName");
  5. }
  6.  
  7. private void printInfo(){
  8. //实例方法引用
  9. new Thread(this::print);
  10. }
  11. }
  12. //测试
  13. private void test() {
  14. Printer p = new Printer();
  15. p.print();
  16. }

输出结果:

query

3、构造方法引用:Class::new

 
  1. public class Test {
  2.  
  3. class User {
  4. String username;
  5.  
  6. User(String username){
  7. this.username = username;
  8. }
  9.  
  10. public String getUsername(){
  11. return username;
  12. }
  13. }
  14.  
  15. @FunctionalInterface
  16. interface UserFactory<T extends User> {
  17. T create(String username);
  18. }
  19.  
  20. public static void main(String[] args) {
  21. Test t = new Test();
  22. t.test();
  23. }
  24.  
  25. private void test() {
  26. UserFactory<User> uf = User::new;
  27. List<User> users = new ArrayList<>();
  28. for (int i = 0; i < 5; ++i) {
  29. users.add(uf.create("user"+i));
  30. }
  31. users.stream().map(User::getUsername).forEach(System.out::println);
  32. }
  33. }

UserFactory作为User的工厂类,是一个函数式接口。当使用User::new创建接口实例时,系统会根据UserFactory.create()的函数签名选择合适的User构造函数。在创建UsrFactory实例后,对UsrFactory.create()的调用都会委托给User的实际构造函数进行,从而创建User对象实例。User::getUsername表示User类的实例方法。

输出结果:

query

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那些年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值