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

  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. 媒体查询(pc端,移动端不同布局)

    媒体查询语法: 1.内联写法:and之后必须有空格@media screen and (min-width:960px //判断浏览器大小条件){body{background:red} //常规的样 ...

  2. CI生成查询记录集result(),row(),row_array().....

    result() 该方法执行成功返回一个对象数组,失败则返回一个空数组. 一般情况下,我们使用下面的方法遍历结果,代码就像这样: $query = $this->db->query(&qu ...

  3. Android屏幕适配笔记

    1.限定符 为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件,在一般情况下我们都是在layout文件夹下为某个活动准备一个默认的布局 ...

  4. java面向对象_构造器

    构造器(构造方法):是类中定义的方法. 1)常常用于给成员变量赋值: 2)与类同名,没有返回值类型,也不能写void: 3)在创建对象时被自动调用.所以构造方法的访问修饰符要用public,才能被自动 ...

  5. 一鼓作气 博客--第五篇 note5

    一.迭代器 二.装饰器 三.生成器 1.生成列表的方式有几种 2.把列表每个数都加1 2.1 data =[1,2,3] for i in map(lambda x:x+1,data):print(i ...

  6. Think in 递归

    网上写递归的文章可以用汗牛充栋来形容了,大多数都非常清晰而又细致的角度上讲解了递归的概念,原理等等.以前学生的时候,递归可以说一直是我的某种死穴,原理,细节我都懂,但是不管是在如何运用或者如何试试算法 ...

  7. cron表达式

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...

  8. tar 命令

    tar -cf   打包的文件名    打包的文件   ------tar  -cf   db.all   test.txt   (-c  表示建立新的包,-f通常是必选项) tar -tf   打包 ...

  9. Android-Parcelable

    Parcelable和Serializable的区别: android自定义对象可序列化有两个选择一个是Serializable和Parcelable 一.对象为什么需要序列化        1.永久 ...

  10. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...