Java新功能之方法引用
方法引用的使用
最初,引用只是针对引用类型完成的,也就是只有数组、类、接口才具备引用操作。JDK1.8后追加了方法引用。实际上引用的本质就是别名。
因此方法的引用就是别名的使用。
方法的引用有四种形式:
引用静态方法: 类名称:static方法名称;
引用某个对象的方法:实例化对象:普通方法;
引用某个特定类的方法:类名称:普通方法;
引用构造方法:类名称:new。
方法的引用是结合函数式编程使用。
1.引用静态方法
举例:使用函数编程返回静态方法
//函数接口+泛型接口 = 函数泛型接口
@FunctionalInterface
public interface IUtil{
R swithPara(P p);
}
public class TestMothod {
public static void main(String[] args) {
IUtil iUtil = (p)->{
//String.valueOf()为静态方法,将int->String
return String.valueOf(p);
};
iUtil.swithPara(5); //5
}
}
举例:使用静态方法引用
//函数接口+泛型接口 = 函数泛型接口
@FunctionalInterface
public interface IUtil{
R swithPara(P p);
}
public class TestMothod {
public static void main(String[] args) {
String str = "1234";
//使用类的静态方法,将int->Sring
IUtil iUtil = String::valueOf;
System.out.println(iUtil.swithPara(5)); //5
//将String->int
IUtil iUtil1 = Integer::parseInt;
System.out.println(iUtil1.swithPara(str)); //1234
}
}
在上述例子中,可以两个方法看做数学函数去理解,即y = f(x)。其中:
y = switchPara(x) ,其中x = p , 是把int->String;
y = valueOf(x), 其中x = p , 把int-> String;
这两者做的事情是一样的,那么给String的静态方法取个别名,就是静态方法引用。
2. 引用对象方法
举例:对象方法的引用
@FunctionalInterface
public interface IUtil
{
P convert();
}
public class TestMothod {
public static void main(String[] args) {
String str = "hello";
/*
IUtil iUtil = ()->{
return str.toUpperCase();
};*/
//对象的方法引用
IUtil iUtil = str::toUpperCase;
System.out.println(iUtil.convert()); //HELLO
}
}
3.引用类中的普通方法
举例:引用普通方法
@FunctionalInterface
public interface IUtil{
R compare(P1 p1, P2 p2);
}
public class TestMothod {
public static void main(String[] args) {
/*
IUtil iUtil = (p1,p2)->{
return p1.compareTo(p2);
};*/
//成员方法引用--- 类名::成员方法
IUtil iUtil = Integer::compareTo;
System.out.println(iUtil.compare(4,1));
IUtil iUtil1 = String::compareTo;
System.out.println(iUtil1.compare("A","a")); //-32
} 无锡人流医院 http://xmobile.wxbhnk120.com/
}
4. 引用构造方法
举例:引用构造方法
public interface IUtil{
R createObject(P1 p1, P2 p2);
}
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public class TestMothod {
public static void main(String[] args) {
/*
IUtil iUtil= (p1,p2)->{
return new Person(p1,p2);
};*/
//引用构造方法--- 类名称::new
//函数接口中的参数要和构造方法中的参数匹配
IUtil iUtil = Person::new;
System.out.println(iUtil.createObject("张三",20));
}
}
总结:
1. 结合函数式编程使用,接口中值允许有一个方法;
2.无论是静态引用,还是普通成员方法引用,上面几种方式中接口的返回值和要引用的返回值相同。
Java新功能之方法引用的更多相关文章
- 乐字节-Java8新特性之方法引用
上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...
- Java 8新特性-4 方法引用
对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容! Java 8的方法引用定义了四种格式: 引用静态方法 ClassName :: staticMetho ...
- Java(43)JDK新特性之方法引用
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228461.html 博客主页:https://www.cnblogs.com/testero ...
- Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系
1.Lambda表达式与接口之间的关系 只要Lambda表达式的声明形式与接口相一致,在很多情况下都可以替换接口.见如下代码 Thread t1 = new Thread(new Runnable() ...
- Java 8 中的方法引用
一.原理概要 lambda 表示式,可以作为某些匿名内部类的替代.主要目的是调用该内部类中的方法,而该方法的实现(重写)由 lambda表示式决定. 通常,我们可能不关心匿名内部类中的具体方法(被重写 ...
- 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)
方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...
- Java 8 中的方法引用,轻松减少代码量,提升可读性!
1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特 ...
- Java8新特性之方法引用&Stream流
Java8新特性 方法引用 前言 什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常(即:非运行 ...
- java基础-四种方法引用
实例 直接三角形,通过两边算第三边,目的是为了如何使用这几种方法引用.代码中多有些不合适,尽情原谅. 静态方法引用 接口的参数列表与类中的具体实现方法的参数列表一样,返回值一致. 调用 //静态引用 ...
随机推荐
- cocos creator策略类手游开发教程
目录 大小6.83GB,Mp4格式,语言:中文 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- elementui---日期格式的选择
在用elementui做数据提交的时候,默认的时间格式一个对象,好麻烦,主要对时间进行格式限制,具体方法如下: <el-form-item :label="$t('oneCard.bi ...
- phpexcel中文手册(转)
首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...
- matlab学习笔记8 基本绘图命令-基本绘图操作
一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 ...
- php连接mysql8报错如何解决
php版本为5.6,连接mysql8.0时报错,但是连接其他mysql8前的版本是正常的 原因可能是mysql8默认的使用密码认证方式不一样,mysql8.0默认使用caching_sha2_pass ...
- 【Python学习之六】文件操作
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.文件的打开与关闭 使用open函数,可以打开一 ...
- H5混合开发中android终端和ios终端常见的兼容问题1
转自 https://blog.csdn.net/xuehu837769474/article/details/80603898 1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上 ...
- PHP实现的MongoDB数据增删改查
原文地址:https://www.mongodb.org.cn/drivers/2.html (该网站为mongoDB官方网站) php中使用mongodb你必须使用 mongodb 的 php驱 ...
- 本地dev环境,运行时用node模块自动读取并整合文件
const http = require('http'); const fs = require('fs'); const path = require('path'); const glob = r ...
- OpenJudge 4152 最佳加法表达式
总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值.例如,在1234中摆放 ...