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!
  • 相关阅读:
    angularjs+ionic的app端分页和条件
    js中对象的自定义排序
    angularJS入门笔记
    SpringBoot学习历程
    页面渲染流程
    跨域问题
    jquery知识点结合使用
    对bootstrap模态框的小尝试
    登录页面两端对齐的样式问题
    输入两个数字,将比较结果输出到页面
  • 原文地址:https://www.cnblogs.com/andywithu/p/7344553.html
Copyright © 2011-2022 走看看