Java 8新特性-4 方法引用
对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容!
Java 8的方法引用定义了四种格式:
- 引用静态方法 ClassName :: staticMethodName
- 引用对象方法: Object:: methodName
- 引用特定类型方法: ClassName :: methodName
- 引用构造方法: ClassName :: new
- 静态方法引用示例
/**
* 静态方法引用
* @param <P> 引用方法的参数类型
* @param <R> 引用方法的返回类型
*/
@FunctionalInterface
interface FunStaticRef<P,R>{ public R tranTest(P p); } public static void main(String[] args) { /*
* 静态方法引用: public static String valueOf
* 即将String的valueOf() 方法引用为 FunStaticRef#tranTest 方法
*/
FunStaticRef<Integer, String> funStaticRef = String::valueOf;
String str = funStaticRef.tranTest(10000);
System.out.println(str.replaceAll("0", "9"));
}
- 对象方法引用示例
/**
* 普通方法引用
* @param <R> 引用方法返回类型
*/
@FunctionalInterface
interface InstanRef<R>{ public R upperCase();
} public static void main(String[] args) { /*
* 普通方法的引用: public String toUpperCase()
*
*/
String str2 = "i see you";
InstanRef<String> instanRef = str2 :: toUpperCase;
System.out.println(instanRef.upperCase()); }
- 特定类型方法引用示例
- 特定方法的引用较为难理解,本身其引用的是普通方法,但是引用的方式却为: ClassName :: methodName
-
/**
* 特定方法的引用
* @param <P>
*/
@FunctionalInterface
interface SpecificMethodRef<P>{
public int compare(P p1 , P p2);
} public static void main(String[] args) { /*
* 特定方法的引用 public int compareTo(String anotherString)
* 与之前相比,方法引用前不再需要定义对象,而是可以理解为将对象定义在了参数上!
*/
SpecificMethodRef<String> specificMethodRef = String :: compareTo;
System.out.println(specificMethodRef.compare("A","B")); ConstructorRef<Book> constructorRef = Book :: new;
Book book = constructorRef.createObject("Java",100.25);
System.out.println(book);
}
- 构造方法引用示例
-
class Book{
private String title;
private double price; public Book() { } public Book(String title,double price){
this.price = price;
this.title = title;
} @Override
public String toString() {
return "Book{" +"title='" + title + '\'' +", price=" + price +'}';
}
} public static void main(String[] args) { /*
* 构造方法引用
*/
ConstructorRef<Book> constructorRef = Book :: new;
Book book = constructorRef.createObject("Java",100.25);
System.out.println(book);
}
-
总的来说Java 8一些新的特性在目前做的项目中还未大量使用,但是学习一下,到时也不至于看到这种Java 8新特性的代码而不知所错!
Java 8新特性-4 方法引用的更多相关文章
- 乐字节-Java8新特性之方法引用
上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...
- JDK8新特性04 方法引用与构造器引用
import java.io.PrintStream; import java.util.Comparator; import java.util.function.*; /** * 一.方法引用 * ...
- Java(43)JDK新特性之方法引用
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228461.html 博客主页:https://www.cnblogs.com/testero ...
- Java8新特性之方法引用&Stream流
Java8新特性 方法引用 前言 什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常(即:非运行 ...
- Java 8 新特性7-方法引用、继承
(原) 方法引用: 方法引用有4种: 1.静态方法引用:类名::静态方法名 在java中,对集合的排序,我们常用java提供的 Collections.sort(List<T> list, ...
- jdk1.8新特性之方法引用
方法引用其实就是方法调用,符号是两个冒号::来表示,左边是对象或类,右边是方法.它其实就是lambda表达式的进一步简化.如果不使用lambda表达式,那么也就没必要用方法引用了.啥是lambda,参 ...
- 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)
方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...
- JDK8新特性之方法引用
什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = Arrays.asList(&q ...
- Java8新特性之方法引用
<Java 8 实战>学习笔记系列 定义 方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它,可以把方法引用看作针对仅仅涉及单一方法的Lambda的语法糖,使用它将减少自己 ...
随机推荐
- Bug管理系统 BugFree
BugFree - 借鉴微软公司软件研发理念.免费且开放源代码.基于Web的精简版Bug管理系统 在线演示:http://www.bugfree.org.cn/demo/Login.php 其它项目管 ...
- Oracle解锁与加锁(HR用户为例)
SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jul 14 18:12:38 2009 Copyright (c) 1982, 2002, Ora ...
- Spring MVC篇一、搭建Spring MVC框架
本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij创建,配合maven管理.整体的目录结构如图: 其中ja ...
- Dertouzos (5750)
Dertouzos 题意: 就是给一个n和一个d,问有多少个小于n的数的最大因子是d. 分析: 如果一个数是质数,又和d互质,它们的乘积在范围内的话显然是满足条件的, 如果这个质数和d不互质,那么如果 ...
- oracle触发器和存储过程的格式
最近接到一个任务要根据一个表来转移另一个表的数据到第三个表.想了想,用决定用触发器+存储过程的方式来做.有些时间没有写存储过程和触发器了,查了一下资料,确定了oracle的触发器和存储过程的格式. 触 ...
- 防止XSS攻击的方法
什么是XSS? 使用Jsoup来防止XSS攻击 Jsoup官网 Jsoup中文 maven包引入 <dependency> <groupId>org.jsoup</gro ...
- 安卓端网页浏览过程中实时更新title的web实现
$(function () { var scrollTop = 0, //缓存上一次触发scroll的时候的scrollTop值 appendIndex = 0, //由于第23行append这个操作 ...
- vue.js的基本操作
1.{{message}}输出data数据中的message. 2.v-for="todo in todos"输出data数据中的dotos数组 3.v-on:click=&quo ...
- 有关于canvas几个新知识点
对于canvas的初学者来说,以下几点应该是不知道的知识点: 1.canvas有兼容IE6/7/8的脚本文件 下载地址:https://github.com/arv/explorercanvas 2. ...
- Mimikatz 使用Tips
1.记录 Mimikatz输出: C:\>mimikatz.exe ""privilege::debug"" ""log sekurl ...