• java中的方法引用(method reference)- 官方文档总结


    2017/7/5

    转载写明出处:http://www.cnblogs.com/daren-lin/p/java-method-reference.html

    今天要说的是java中的一项新特性,方法引用,method reference。方法引用完全可以用lambda来代替,不会根本不影响平时的开发,但是如果学会了方法引用的话,可以装逼!

    本文按照官方文档的例子来解释。

    方法引用(method reference)

    方法引用只是lambda表达式的拓展,如果不了解lambda表达式,请先阅读本文:java语言中的匿名类与lambda表达式介绍与总结

    有时候lambda表达式只是调用了一个已经申明过的方法,为了增加可读性(zhuang bi)和进一步简化,可以使用方法引用。

    下面的例子可以很好说明方法引用的使用情形

    例子:如果想要按照年龄(age)来给人(Person)排序

    有一个Person的数组 rosterAsArray。首先我们实现一个 Comparator,然后使用Arrays.sort来排序

    1 Person[] rosterAsArray = roster.toArray(new Person[roster.size()]);
    2 
    3 class PersonAgeComparator implements Comparator<Person> {
    4     public int compare(Person a, Person b) {
    5         return a.getBirthday().compareTo(b.getBirthday());
    6     }
    7 }
    8         
    9 Arrays.sort(rosterAsArray, new PersonAgeComparator());

    这里我们看到Comparator实际上是个函数接口(functional interface),所以直接用lambda来简化

    1 Arrays.sort(rosterAsArray,
    2     (Person a, Person b) -> {
    3         return a.getBirthday().compareTo(b.getBirthday());
    4     }
    5 );

    假设Person中已经存在一个static的方法 Person.compareByAge 来比较两个人的年龄,那么我们可以写成如下

    1 Arrays.sort(rosterAsArray,
    2     (a, b) -> Person.compareByAge(a, b)
    3 );

    这个时候我们发现,实际上这个lambda只是调用了已经存在的一个函数compareByAge,那么我们就可以用方法引用了,我们可以写成更简单的形式:

    1 Arrays.sort(rosterAsArray, Person::compareByAge);

    一行搞定!

    4种不同类型的方法引用

    很直接,我就不做说明直接上表格了

    类型例子
    static方法的引用 ContainingClass::staticMethodName
    特定对象的方法的引用 containingObject::instanceMethodName
    特定类型的方法的引用 ContainingType::methodName
    构造器的引用 ClassName::new

    参考

    https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

  • 相关阅读:
    Django发送邮件功能
    Django视图中使用本地缓存
    Django中利用type动态操作数据库表
    Django扩展内置User类
    Django开发环境配置(win10)
    MySql隔离级别
    染色法判定二分图
    关押囚犯
    迷一样的牛poj2182
    poj3468 A Simple Problem with Integers
  • 原文地址:https://www.cnblogs.com/daren-lin/p/java-method-reference.html
Copyright © 2020-2023  润新知