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

  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. Django动态渲染多层菜单

    为后续给菜单设置权限管理方便,通过给页面模版菜单动态渲染,通过数据菜单表进行匹配需要渲染的菜单 #Django表结构 class Menus(models.Model): name = models. ...

  2. Python的字节编译

    1.什么是Python的.pyc文件 在python中 .pyc文件是指以.pyc为后缀名的这一类文件,在我们的python的安装目录里,找到模块所在的目录Lib会看到很多以.py结尾的模块文件,与之 ...

  3. 学习Nodejs之mysql

    学习Nodejs连接mysql数据库: 1.先安装mysql数据库 npm install mysql 2.测试连接数据库: var sql = require("mysql"); ...

  4. SQLite3

    记录一个基础的IOS下SQLite的例子: @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSAr ...

  5. 使用Akka.net开发第一个分布式应用

    系列主题:基于消息的软件架构模型演变 既然这个系列的主题是"基于消息的架构模型演变",少不了说说Actor模型.Akka.net是一个基于Actor模型的分布式框架.如果你对分布式 ...

  6. ASP.NET MVC 5 入门指南汇总

    经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...

  7. 剑指Offer面试题:11.打印1到最大的n位数

    一.题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 二.不同的解法 2.1 不假思索的解法 最容易想到的办 ...

  8. CSS3 特效分解一

    先声明下,下面的特效不是我发明的,对CSS3的创造力还不够,只是看了别人demo的源码,一点一点分析出来的.整理出的笔记,分享给大家.因为源码是好,但是一头扎进去半天出不来. 首先看个登陆框,如下,相 ...

  9. MySQL 存储过程

    MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...

  10. QParserGenerator的文法文件介绍

    在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGen ...