Java 8新特性方法引用详细介绍

 更新时间:2016年12月03日 14:09:34   作者:MPPC  
这篇文章主要介绍了Java 8新特性方法引用详细介绍的相关资料,这里对新特性 方法引用做的资料整理,具有参考价值,需要的朋友可以参考下

Java 8新特性方法引用

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

  Java 8的方法引用定义了四种格式:

  1. 引用静态方法     ClassName :: staticMethodName
  2. 引用对象方法:  Object:: methodName
  3. 引用特定类型方法: ClassName :: methodName
  4. 引用构造方法: 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中HashMap的原理分析

    java中HashMap的原理分析

    HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题
    2016-03-03
  • Java重载构造原理与用法详解

    Java重载构造原理与用法详解

    这篇文章主要介绍了Java重载构造原理与用法,结合实例形式分析了java可变参数、方法重载、构造器等相关概念、原理及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 启用Spring事务管理@EnableTransactionManagement示例解析

    启用Spring事务管理@EnableTransactionManagement示例解析

    这篇文章主要为大家介绍了启用Spring事务管理@EnableTransactionManagement示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java使用screw来对比数据库表和字段差异

    Java使用screw来对比数据库表和字段差异

    这篇文章主要介绍了Java如何使用screw来对比数据库表和字段差异,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • 详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码)

    本篇文章主要介绍了Spring batch 入门学习教程(附源码),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 如何用java编写微信小程序消息提醒推送

    如何用java编写微信小程序消息提醒推送

    最近参与开发的项目有用到微信模板消息推送,在这离记录一下,下面这篇文章主要给大家介绍了关于如何用java编写微信小程序消息提醒推送的相关资料,需要的朋友可以参考下
    2023-11-11
  • Java异常处理中的各种细节汇总

    Java异常处理中的各种细节汇总

    这篇文章主要给大家介绍了关于Java异常处理中的各种细节的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-01-01
  • springcloud本地调试feign调用出现的诡异404问题及解决

    springcloud本地调试feign调用出现的诡异404问题及解决

    这篇文章主要介绍了springcloud本地调试feign调用出现的诡异404问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringMVC中处理静态资源的过程详解

    SpringMVC中处理静态资源的过程详解

    本文给大家介绍SpringMVC中处理静态资源的过程,结合示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Java 如何使用正则表达式去除前导0

    Java 如何使用正则表达式去除前导0

    这篇文章主要介绍了Java 使用正则表达式去除前导0的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论