方法引用的使用

  最初,引用只是针对引用类型完成的,也就是只有数组、类、接口才具备引用操作。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.无论是静态引用,还是普通成员方法引用,上面几种方式中接口的返回值和要引用的返回值相同。

最新文章

  1. MySQL远程连接丢失问题解决方法Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0
  2. C# .csv文件转为Excel格式;Excel格式转换为.csv
  3. 使用dSYM分析App崩溃日志
  4. 2015 CTSC & APIO滚粗记
  5. background-size的两个属性:cover和contain
  6. MySQL中EXPLAIN的解释
  7. appium-向右滑动定位
  8. Disable Portrait in app
  9. 003. vs2010发布、打包安装程序(转)
  10. Less 官方文档学习笔记
  11. 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决
  12. @Valid springMVC bean校验不起作用及如何统一处理校验
  13. java模拟http post
  14. 简易浏览器App webview
  15. dispatch_async 与 dispatch_get_global_queue 的使用方法
  16. UIAppearance使用详解-备
  17. 浅谈WebView的使用 js alert
  18. jQuery MiniUI
  19. sql datalength与len区别用法
  20. Mybatis在oracle批量更新

热门文章

  1. MySQL导入csv文件内容到Table及数据库的自增主键设置
  2. ERROR: relation "pg_buffercache" does not exist
  3. USB安装ESXi出错,menu.c32 not a com32r image
  4. Python3基础 tuple list转为tuple
  5. unable to lock the administration错误解决
  6. 【计算机视觉】图像着色(Image Colorization)
  7. MAX10 ADC的一些基知识
  8. 新手配置LNMP环境教程
  9. springboot实战日记(一)数据库基本信息
  10. layui的select监听