对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容

  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 方法引用的更多相关文章

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

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

  2. JDK8新特性04 方法引用与构造器引用

    import java.io.PrintStream; import java.util.Comparator; import java.util.function.*; /** * 一.方法引用 * ...

  3. Java(43)JDK新特性之方法引用

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228461.html 博客主页:https://www.cnblogs.com/testero ...

  4. Java8新特性之方法引用&Stream流

    Java8新特性 方法引用 前言 什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常(即:非运行 ...

  5. Java 8 新特性7-方法引用、继承

    (原) 方法引用: 方法引用有4种: 1.静态方法引用:类名::静态方法名 在java中,对集合的排序,我们常用java提供的 Collections.sort(List<T> list, ...

  6. jdk1.8新特性之方法引用

    方法引用其实就是方法调用,符号是两个冒号::来表示,左边是对象或类,右边是方法.它其实就是lambda表达式的进一步简化.如果不使用lambda表达式,那么也就没必要用方法引用了.啥是lambda,参 ...

  7. 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)

    方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...

  8. JDK8新特性之方法引用

    什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = Arrays.asList(&q ...

  9. Java8新特性之方法引用

    <Java 8 实战>学习笔记系列 定义 方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它,可以把方法引用看作针对仅仅涉及单一方法的Lambda的语法糖,使用它将减少自己 ...

随机推荐

  1. 配置nginx的图片服务器

    user nginx; worker_processes 8; error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; pid ...

  2. Master-Slave通用基础框架

    一.设计目的 设计出一个通用的Master-Slave基础框架,然后可以基于这个框架来实现特定的业务需求,比如实现多节点并行计算.分布式处理等. 二.设计理念 基于经典的命令模式,Master和Sla ...

  3. mina通信 demo

    1,要用到4个jar 2,服务端 package mina.server; import java.io.IOException; import java.net.InetSocketAddress; ...

  4. Web前端面试之HTML

    1. 对WEB标准以及W3C的理解与认识 web标准规范要求,书写标签闭合.小写.不乱嵌套,可提高搜索机器人对网页内容的搜索几率.--- SEO 使用外链css和js脚本,结构与行为.结构与表现分离, ...

  5. [转]android:动态创建多个按钮 及 批量设置监听

    之前投机取巧,先创建好多个按钮,再根据需要的数量进行部分隐藏,不过还是逃不过呀. 这样根本无法批量地 findId,批量地 设置监听. 所以今天还是认认真真地研究回“动态创建按钮”,终于,通过不断尝试 ...

  6. yii笔一----基础,安装,结构,增删改查基本操作

    从yii中文站开始http://www.yiichina.com/ Yii 是一个高性能,基于组件的 PHP 框架 一. 1.安装yii方式 composer安装或者下载一份应用程序模板.刚开始学习, ...

  7. linux安装VMware-tools,

    系统中可能预装了open-vm-tools和VMware-tools冲突,所以需要先将前者卸载在进行安装不同系统卸载使用的命令不一样,centos的命令可以使用rpm,ubuntu的命令可以使用dpk ...

  8. TCP三次握手四次挥手

    看到一篇总结很好的TCP三次握手,学习一下,原文链接. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,S ...

  9. java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  10. Surface Shader简单向导

    Surface Shader 表面着色器 描述 当你的Material要处理光照,则一般使用Surface Shader.Surface Shader隐藏了光照的计算,你只需要在surf函数里设置好反 ...