方法引用的使用

  最初,引用只是针对引用类型完成的,也就是只有数组、类、接口才具备引用操作。JDK1.8后追加了方法引用。实际上引用的本质就是别名。

  因此方法的引用就是别名的使用。

  方法的引用有四种形式:

  引用静态方法: 类名称:static方法名称;

  引用某个对象的方法:实例化对象:普通方法;

  引用某个特定类的方法:类名称:普通方法;

  引用构造方法:类名称:new。

  方法的引用是结合函数式编程使用。

  1.引用静态方法

  举例:使用函数编程返回静态方法

  //函数接口+泛型接口 = 函数泛型接口

  @FunctionalInterface

  public interface IUtil{

  R swithPara(P p);

  }

  public class TestMothod {

  public static void main(String[] args) {

  IUtil iUtil = (p)->{

  //String.valueOf()为静态方法,将int->String

  return String.valueOf(p);

  };

  iUtil.swithPara(5); //5

  }

  }

  举例:使用静态方法引用

  //函数接口+泛型接口 = 函数泛型接口

  @FunctionalInterface

  public interface IUtil{

  R swithPara(P p);

  }

  public class TestMothod {

  public static void main(String[] args) {

  String str = "1234";

  //使用类的静态方法,将int->Sring

  IUtil iUtil = String::valueOf;

  System.out.println(iUtil.swithPara(5)); //5

  //将String->int

  IUtil iUtil1 = Integer::parseInt;

  System.out.println(iUtil1.swithPara(str)); //1234

  }

  }

  在上述例子中,可以两个方法看做数学函数去理解,即y = f(x)。其中:

  y = switchPara(x) ,其中x = p , 是把int->String;

  y = valueOf(x), 其中x = p , 把int-> String;

  这两者做的事情是一样的,那么给String的静态方法取个别名,就是静态方法引用。

  2. 引用对象方法

  举例:对象方法的引用

  @FunctionalInterface

  public interface IUtil

  {

  P convert();

  }

  public class TestMothod {

  public static void main(String[] args) {

  String str = "hello";

  /*

  IUtil iUtil = ()->{

  return str.toUpperCase();

  };*/

  //对象的方法引用

  IUtil iUtil = str::toUpperCase;

  System.out.println(iUtil.convert()); //HELLO

  }

  }

  3.引用类中的普通方法

  举例:引用普通方法

  @FunctionalInterface

  public interface IUtil{

  R compare(P1 p1, P2 p2);

  }

  public class TestMothod {

  public static void main(String[] args) {

  /*

  IUtil iUtil = (p1,p2)->{

  return p1.compareTo(p2);

  };*/

  //成员方法引用--- 类名::成员方法

  IUtil iUtil = Integer::compareTo;

  System.out.println(iUtil.compare(4,1));

  IUtil iUtil1 = String::compareTo;

  System.out.println(iUtil1.compare("A","a")); //-32

  } 无锡人流医院 http://xmobile.wxbhnk120.com/

  }

  4. 引用构造方法

  举例:引用构造方法

  public interface IUtil{

  R createObject(P1 p1, P2 p2);

  }

  public class Person {

  private String name;

  private Integer age;

  public Person(String name, Integer age) {

  this.name = name;

  this.age = age;

  }

  @Override

  public String toString() {

  return "Person{" +

  "name='" + name + '\'' +

  ", age=" + age +

  '}';

  }

  public class TestMothod {

  public static void main(String[] args) {

  /*

  IUtil iUtil= (p1,p2)->{

  return new Person(p1,p2);

  };*/

  //引用构造方法--- 类名称::new

  //函数接口中的参数要和构造方法中的参数匹配

  IUtil iUtil = Person::new;

  System.out.println(iUtil.createObject("张三",20));

  }

  }

  总结:

  1. 结合函数式编程使用,接口中值允许有一个方法;

  2.无论是静态引用,还是普通成员方法引用,上面几种方式中接口的返回值和要引用的返回值相同。

Java新功能之方法引用的更多相关文章

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

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

  2. Java 8新特性-4 方法引用

    对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容! Java 8的方法引用定义了四种格式: 引用静态方法     ClassName :: staticMetho ...

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

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

  4. Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系

    1.Lambda表达式与接口之间的关系 只要Lambda表达式的声明形式与接口相一致,在很多情况下都可以替换接口.见如下代码 Thread t1 = new Thread(new Runnable() ...

  5. Java 8 中的方法引用

    一.原理概要 lambda 表示式,可以作为某些匿名内部类的替代.主要目的是调用该内部类中的方法,而该方法的实现(重写)由 lambda表示式决定. 通常,我们可能不关心匿名内部类中的具体方法(被重写 ...

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

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

  7. Java 8 中的方法引用,轻松减少代码量,提升可读性!

    1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特 ...

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

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

  9. java基础-四种方法引用

    实例 直接三角形,通过两边算第三边,目的是为了如何使用这几种方法引用.代码中多有些不合适,尽情原谅. 静态方法引用 接口的参数列表与类中的具体实现方法的参数列表一样,返回值一致. 调用 //静态引用 ...

随机推荐

  1. 实验与作业(Python)-03 Python程序实例解析(函数、循环、range、turtle)

    截止日期: 要求: 下周实验课前上交,做好后在实验课上检查可获取平时分. 做出进阶或选做的的请用清晰的标致标识出来,方便老师批改 本次作业:可提交也可不提交.作业算平时成绩. 本次作业内容量较大,请组 ...

  2. ora-8176原因及解决方法

    在oracle undo_retention范围内,且_undo_autotune=false的情况下,一个语句执行的时候仍然发生ora-8176,语句如下: INSERT INTO XXX SELE ...

  3. checkbox与label内的文字垂直居中的解决方案

    <label style="float:left;margin-top:5px;margin-left:10px;cursor:pointer"><input t ...

  4. pip3的国内安装源

    1,清华源 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualen 2,豆瓣源 pip3 install -i https ...

  5. CefSharp 提示 flash player is out of date 运行此插件 等问题解决办法

    CefSharp 提示 flash player is out of date 或者 需要手动右键点 运行此插件 脚本 等问题解决办法 因为中国版FlashPlayer变得Ad模式之后,只好用旧版本的 ...

  6. layui自定义模块

    想把用了layui的页面的一些函数抽取公用,直接引入外部js不可行,只能用layui的模块功能.官网没有说明,但模块名必须和文件名一致 新建yananmod.js文件,内容如下: layui.defi ...

  7. C# 注册DLL至GAC 并在添加引用中使用该DLL

    本文链接:https://blog.csdn.net/World3000/article/details/819835901,创建一个强签名的类库 类库属性中新建秘钥文件 或者使用工具 使用命令sn ...

  8. 问题三:Appium 的 UIAutomator2 模式下使用 sendKeys 出现错误

    在Appium默认的模式下,可以对TextFiled控件进行sendKeys操作: 设置capabilities.setCapability("automationName",&q ...

  9. IDEA一个工程如何启动多次

  10. 【转帖】AMD Zen之父、Intel副总Jim Keller到底有多牛?

    AMD Zen之父.Intel副总Jim Keller到底有多牛? https://www.cnbeta.com/articles/tech/907295.htm 几乎玩过 所有的中国国产化CPU的祖 ...