zoukankan      html  css  js  c++  java
  • java8之lambda表达式(2)-方法引用

    方法引用使用的地方也是在函数式接口,使用方法引用可以使代码更加简单和便捷
    在如下代码中
    根据List中字符串长度排序的代码可以写成如下:
    public static void test1_() {
     
        List<String> strLst = new ArrayList<String>() {
            {
                add("adfkjsdkfjdskjfkds");
                add("asdfasdfafgfgf");
                add("public static void main");
            }
        };
        Collections.sort(strLst, String::compareToIgnoreCase);
        System.out.println(strLst);
    }
    只要方法的参数和返回值类型与函数式接口中抽象方法的参数和返回值类型一致,就可以使用方法引用。
    方法引用主要有如下三种使用情况
    1. 类::实例方法
    2. 类::静态方法
    3. 对象::实例方法
    其中后两种情况等同于提供方法参数的lambda表达式,如System.out::println 等同于(x)->System.out.println(x),Math::pow 等同于(x,y)->Math.pow(x,y).
    第一种中,第一个参数会成为执行方法的对象,String::compareToIgnoreCase)等同于(x,y)->x.compareToIgnoreCase(y)
    此外,方法引用还可以使用this::methodName及super::methodName表示该对象或者其父类对象中的方法
    class Father {
        public void greet() {
            System.out.println("Hello, i am function in father!");
        }
    }
     
    class Child extends Father {
        @Override
        public void greet() {
            Runnable runnable = super::greet;
            new Thread(runnable).start();
        }
    }
    public static void main(String[] args){
            new Child().greet();
        }
    最后打印的结果为:Hello, i am function in father!
  • 相关阅读:
    JDBI
    Concise: Compressed ’n’ Composable Integer Set
    java 7 新特性
    BIO的简单Demo
    手写一个死锁Demo
    实现一个Cglib代理Demo
    实现一个JDK代理demo
    ClassNotFoundException和 NoClassDefFoundError区别验证
    集合—ArrayList
    Hadoop之Storm基础
  • 原文地址:https://www.cnblogs.com/andywithu/p/7344553.html
Copyright © 2011-2022 走看看