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

  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. BZOJ4293: [PA2015]Siano

    Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m ...

  2. linux常用命令总结

    du -sh * 当前目录下所有文件占用空间大小,df  空间占用 top 资源使用情况 M 根据驻留内存大小进行排序 tail 1.tail -f filename说明:监视filename文件的尾 ...

  3. Linux上的free命令详解、swap机制

    Linux上的free命令详解   解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...

  4. spring3.0使用annotation完全代替XML

    @Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation. 从spring2.5开始,annotat ...

  5. redis 的理解

    1.Redis使用 C语言开发的.Redis 约定此版本号,为偶数的版本是稳定版(如:2.4版 2.6版),奇数版是非稳定版(如:2.5版 2.7版) 2.Redis 数据库中的所有的数据都存储在内存 ...

  6. javascript 创建对象的7种模式

    使用字面量方式创建一个 student 对象: var student = function (){ name : "redjoy", age : 21, sex: women, ...

  7. js判断undefined类型

    js判断undefined类型 if (reValue== undefined){    alert("undefined");    }  发现判断不出来,最后查了下资料要用ty ...

  8. CSS中"!important"的使用

    本篇文章使用最新的IE10以及firefox与chrome测试(截止2013年5月27日22:23:22) CSS的原理: 我们知道,CSS写在不同的地方有不同的优先级, .css文件中的定义 < ...

  9. oracle--导出、导入blob类型的字段

    blob是oracle中的一个数据类型,保存的是压缩后的二进制形式的大数据. 数据迁移如果涉及到blob字段,都不好处理,因为无法用常规方法进行操作,如:使用select查看该字段,也无法用inser ...

  10. 系统吞吐量(TPS)、用户并发量、性能测试概念和公式

    分享一个概念: http://www.ha97.com/5095.html