zoukankan      html  css  js  c++  java
  • Java8 方法引用

    概述

    方法引用是用来直接访问类或实例阴茎存在的方法或者构造方法.它需要由兼容的函数式接口(lambda表达式中用到的接口)构成的目标类型上下文. 有时候, 当我们想要实现一个函数式接口的方法, 但是已经由类实现了我们想要的功能, 这时可以使用方法引用来直接使用现有的功能实现.

    关于lambda表达式可以看这篇文章Java8 Lambda表达式

    当lambda表达式只是执行一个方法调用时, 直接通过方法引用的形式调用. 方法引用是一种更简洁的lambda表达式.

    方法引用是lambda表达式的简写, 提高了代码可读性. 可以看出来, 方法引用就是用已经实现的方法来实现lambda表达式中的实现, 所以引用的方法要满足以下要求:

    1. 引用的方法的参数列表必须与实现的抽象方法参数列表保持一致.

    使用

    因为方法引用是简写的lambda表达式, 所以类比即可.

    方法引用的语法为:

    类或对象名::方法名或new
    

    通过引用即可引用指定类或对象的指定方法

    分类

    下面介绍以下几种不同的方法引用.

    1.静态方法引用

    顾名思义, 静态方法引用就是引用类的静态方法, 语法为:

    类名::静态方法名
    

    方法引用与lambda表达式:

    String::valueOf 等价于 s -> String.valueOf(s);
    Math::pow 等价于 (x,y) -> Math.pow(x,y);
    

    Java8 方法引用

    2.实例方法引用

    顾名思义,实例方法引用就是引用对象实例的方法, 语法为:

    对象实例::方法名
    

    方法引用与lambda表达式:

    String str = "aaaaaaaaaaa";
    // 若实例方法要通过对象来调用, 第一个参数会成为调用实例方法的对象, 后面的参数为调用方法的参数
    String::length 等价于lambda表达式 s -> s.length();
    String::equals 等价于lambda表达式 (s1,s2) -> s1.equals(s2);
    // 若实例方法为this或super, 参数会成为调用方法的参数
    this::equals 等价于lambda表达式 s -> this.equals(s);
    super::equals 等价于lambda表达式 s -> super.equals(s);
    

    Java8 方法引用

    3.构造方法引用

    顾名思义, 构造方法引用就是引用类的构造方法, 语法为:

    类名::new
    

    方法引用与lambda表达式:

    // 会根据参数寻找合适的构造方法
    String::new 等价于lambda表达式 s->new String(s);
     也等价于 ()->new String();
    // 同时也可以创建数组
    int[]::new 等价于lambda表达式 x->new int[x];
    

    Java8 方法引用


    关于方法引用的更多可以自己进行尝试

  • 相关阅读:
    linux下mysql安装
    出现GC overhead limit exceeded 的解决方案
    什么是OOM?如何解决OOM问题!
    老司机告诉你:别再被忽悠,汽车节气门这样洗最养车
    HDU 4352 XHXJ's LIS(数位dp&状态压缩)
    Linux bash: scp: command not found的问题记录
    Codeforces Round #315 (Div. 2)
    【营销】非常重要
    firebug的应用
    powerdesigner中实现PDM到MYSQl数据库的转换
  • 原文地址:https://www.cnblogs.com/hujingnb/p/10181630.html
Copyright © 2011-2022 走看看