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

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

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

关于lambda表达式可以看这篇文章Java8 Lambda表达式

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

方法引用是lambda表达式的简写, 提高了代码可读性. 可以看出来, 方法引用就是用已经实现的方法来实现lambda表达式中的实现, 所以引用的方法要满足以下要求:

引用的方法的参数列表必须与实现的抽象方法参数列表保持一致. 使用 因为方法引用是简写的lambda表达式, 所以类比即可.

方法引用的语法为:

类或对象名::方法名或new 通过引用即可引用指定类或对象的指定方法

分类 下面介绍以下几种不同的方法引用.

1.静态方法引用

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

类名::静态方法名 方法引用与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 方法引用 欢迎工作一到五年的Java工程师朋友们加入Java群: 891219277 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

转载于:https://juejin.im/post/5c356620e51d45524e1e67ed

你可能感兴趣的文章
Workstation服务无法启动导致无法访问文件服务器
查看>>
.Net组件程序设计之远程调用(二)
查看>>
ant中文教程
查看>>
Linux常用命令(一)
查看>>
WSUS数据库远端存储条件下切换域及数据库迁移
查看>>
【VMCloud云平台】SCAP(四)租户(一)
查看>>
linux释放内存的方法
查看>>
基于 Android NDK 的学习之旅----- C调用Java
查看>>
Google 或强制 OEM 预装 20 款应用,给你一个不Root的理由
查看>>
我的友情链接
查看>>
双边过滤器(Bilateral filter)
查看>>
Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)
查看>>
Windows 10 技术预览
查看>>
Tomcat http跳转https
查看>>
一个自动布署.net网站的bat批处理实例
查看>>
tomcat 安装
查看>>
AIX:物理卷及有关概念
查看>>
我的友情链接
查看>>
Centos6.6安装选包及基础场景说明
查看>>
《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
查看>>