JAVA8 方法引用:(四种方法引用的使用)

  对象引用的特点:不同的对象可以操作同一块的内容;而方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字。

引用静态方法:

  类名称 ::  static 方法名称

引用某个对象的方法:

  实例化对象 :: 普通方法

引用特定类型的方法:

  特定类 :: 普通方法

引用构造方法:

  类名称 :: new

引用静态方法:【在String类中有一个valueOf()方法;】?

/**
* 实现方法的引用接口
* @param<P> 引用方法参数的类型
* @param<R> 引用方法返回的类型
*/
interface IMessage<P,R> {
public R zhuanhuan(P p) ;
} public class TestDemo {
public static void main(String [] args) {
//即:将String(类).valueOf()方法变为了IMessage接口里的zhuanhuan()方法
IMessage<Integer,String> msg = String :: valueOf;
String str = msg.zhuanhuan(1000) ;
System.out.println(str.replaceAll("0","9"));
}
}

普通方法引用:

/**
* 实现方法的引用接口
* @param<R> 引用方法返回的类型
*/
interface IMessage<R> {
public R upper() ;
} public class TestDemo {
public static void main(String [] args) {
// String类的toUpperCase()方法的目的是将实例化对象调用该方法
// 本代码中,将toUpperCase()函数的应用交给了IMessage接口的upper方法
IMessage<String> msg = "Hello" :: toUpperCase;
String str = msg.upper() ; // 相当于调用 "Hello".toUpperCase()
System.out.println(str);
}
}

  【如果要实现函数的引用,那么必须要有接口,并且接口中有且只有一个抽象方法】

 >>> 如果函数引用的接口有多个抽象方法则为不合规则,这时需要引用一个注解,说明该接口为函数式接口(函数引用): @FunctionalInterface

  

  在进行方法引用的时候,还有另外的一种形式的引用:(需要特定类的对象支持)

…………………………

引用构造方法:

interface IMessage<C> {
public C create(String t , double p) ;
} class Book {
private String title ;
private double price ;
public Book(String title , double price) {
this.title = title ;
this.price = price ;
}
@Override
public String toString() {
return this.title + '\t' + this.price ;
}
} public class TestDemo {
public static void main(String [] args) {
IMessage<Book> msg = Book :: new ; //引用Book类中的构造方法
// 调用的create实际上是调用的Book.Book()构造方法
Book book = msg.create("Java Fail",12.2) ;
System.out.println(book);
}
}

  对象的引用是使用不同的名字,而方法引用是需要有一个函数式的接口并且设置号参数。


推荐学习:https://www.cnblogs.com/xiaoxi/p/7099667.html

Java 方法引用_特性的更多相关文章

  1. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

  2. java 对象的this使用 java方法中参数传递特性 方法的递归

    一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this  --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...

  3. 方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用和数组的构造器引用

    package com.yang.Test.ThisMethodReference; /** * 通过this引用本类的成员方法 */ public class Husband { //定义一个买房子 ...

  4. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_7方法引用_数组的构造器引用

    先创建函数式接口 创建测试类 打印长度是10...... 方法引用优化

  5. java 方法引用(method reference)

    it -> it != null等价于Objects::nonNull

  6. 乐字节-Java8新特性之方法引用

    上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...

  7. 乐字节Java8核心特性之方法引用

    大家好,我是乐字节的小乐,上一次我们说到了Java8核心特性之函数式接口,接下来我们继续了解Java8又一核心特性--方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引 ...

  8. Java笔记——Java8特性之Lambda、方法引用和Streams

    Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...

  9. Java 8新特性-4 方法引用

    对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容! Java 8的方法引用定义了四种格式: 引用静态方法     ClassName :: staticMetho ...

随机推荐

  1. OpenWrite插件上架Google商店,插件安装更加容易!用户安全更有保障!

    随着越来越多用户加入OpenWrite写作与快速发布文章到各大技术社区,不少非程序员童鞋经常会卡在插件安装这一步. 这是因为之前我们没有把插件上架到Google商店,所以需要用比较硬核的方式来安装. ...

  2. java 实现文件下载中文名不显示

    需要将指定字符串的编码转换成浏览器里面的ISO-8859-1编码 String name = new String(name.getBtes("utf-8"),"ISO- ...

  3. SpringMVC参数绑定,这篇就够了!

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  4. Selenium(十九):unittest单元测试框架(五) Page Object设计模式

    1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...

  5. IDEA 2019.2版本下载安装与PJ教程

    场景 IDEA版本过低的话会导致某些IDEA插件没法安装,比如Lombok插件和EasyCode插件等. 实现 双击exe安装包 点击Next 选择安装路径,点击Next 设置桌面快捷方式,增加到右键 ...

  6. Use a Multiline Editor for String Properties 对字符串属性使用多行编辑器

    In this lesson, you will learn how to display a multiline editor for string properties. For this pur ...

  7. Android8.1 源码修改之通过黑名单屏蔽系统短信功能和来电功能

    前言 之前写过一篇Android6.0 的屏蔽系统短信功能和来电功能,具体看这里 同样的最近有个新需求,需要将8.1 设备的来电功能和短信功能都屏蔽掉,特殊产品就是特殊定制,那就开始吧. 屏蔽短信功能 ...

  8. 个人项目开源之c++基于epoll实现高并发游戏盒子(服务端+客户端)源代码

    正在陆续开源自己的一些项目 此为c++实现高并发的游戏盒子,平台问题需要迁移重构,所以有一些遗留问题,客户端异常断开没有处理,会导致服务器崩溃,还有基于快写代码编程平台实现的小程序切换,线程读写缓存没 ...

  9. Redis主从复制的基本操作

    一,安装: 1.1.将redis压缩包放到 /opt 下. 2.解压 3.进入目录执行  make 4.执行  make  install 5.在 / 下创建redis文件夹mkdir redis 6 ...

  10. [20191115]oracle实例占用内存计算.txt

    [20191115]oracle实例占用内存计算.txt --//以前学习oracle数据库时,总想了解实例占用内存多少,我曾经在一些会议底下问过一位高手,对方说计算这个相对很难,许多东西是共享的.- ...