zoukankan      html  css  js  c++  java
  • 方法引用的基本使用

    1、例子中用到的函数式接口

    package com.ly.demo.java8;
    
    /**
     * @author liuyang
     * @create 2020-05-17 23:16
     */
    @FunctionalInterface
    public interface IntArrayBuilder {
        int[] buildIntArray(int len);
    }
    package com.ly.demo.java8;
    
    /**
     * @author liuyang
     * @create 2020-05-17 21:57
     */
    // 函数接口,有且仅有一个抽象方法的接口
    @FunctionalInterface
    public interface MyInterface {
        void print(String str);
    }
    package com.ly.demo.java8;
    
    /**
     * @author liuyang
     * @create 2020-05-17 23:00
     */
    @FunctionalInterface
    public interface MyObjBuilder {
        MyObj build(String name,Integer age);
    }

    2、例子中用到的类

    package com.ly.demo.java8;
    
    /**
     * @author liuyang
     * @create 2020-05-17 21:57
     */
    public class MyObj extends MyObjSup {
        public String name;
        public Integer age;
    
        public MyObj() {
        }
    
        public MyObj(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public void printStr(MyInterface mi, String str) {
            mi.print(str);
        }
    
        public void printUpperCase(String str) {
            System.out.println(str.toUpperCase());
        }
    
        public static void printLowerCase(String str) {
            System.out.println(str.toLowerCase());
        }
    
        @Override
        public void sayHello(String s) {
            System.out.println("MyObj-你好,我是:"+s);
        }
    
        public void say1() {
            // 引用父类的方法
            printStr(super::sayHello,"小明");
        }
    
        public void say2() {
            // 引用本类的方法
            printStr(this::sayHello,"小芳");
        }
    
        MyObj buildMyObj(MyObjBuilder myObjBuilder,String name,Integer age) {
            return myObjBuilder.build(name,age);
        }
    
        int[] createIntArray(int len,IntArrayBuilder iab) {
            return iab.buildIntArray(len);
        }
    }
    package com.ly.demo.java8;
    
    /**
     * @author liuyang
     * @create 2020-05-17 22:31
     */
    public class MyObjSup {
        public void sayHello(String s) {
            System.out.println("MyObjSup-你好,我是:"+s);
        }
    }

    3、测试类

    package com.ly.demo.java8;
    
    import org.junit.Test;
    
    /**
     * @author liuyang
     * @create 2020-05-17 22:00
     */
    public class MethodRefTest {
        @Test
        public void test1() {
            MyObj myObj = new MyObj();
            // 函数式接口都可以用Lambda表达式代替
            myObj.printStr(s -> System.out.println(s),"hello1");
        }
    
        @Test
        public void test2() {
            MyObj myObj = new MyObj();
            // Lambda表达式也可以用方法引用替代
            // 被引用方法的入参必须和函数式接口方法的入参一致
            myObj.printStr(System.out::println,"hello2");
        }
    
        @Test
        public void test3() {
            MyObj myObj = new MyObj();
            // 引用对象的实例方法
            myObj.printStr(myObj::printUpperCase,"hello3");
        }
    
        @Test
        public void test4() {
            MyObj myObj = new MyObj();
            // 引用类的静态方法
            myObj.printStr(MyObj::printLowerCase,"HELLO4");
        }
    
        @Test
        public void test5() {
            // 测试引用父类的方法
            new MyObj().say1();
        }
    
        @Test
        public void test6() {
            // 测试引用本类的方法
            new MyObj().say2();
        }
    
        @Test
        public void test7() {
            // 测试引用构造方法
            MyObj myObj = new MyObj().buildMyObj(MyObj::new,"liuyang",18);
            System.out.println(myObj.name);
            System.out.println(myObj.age);
        }
    
        @Test
        public void test8() {
            // 测试引用数组的构造方法
            int[] arr = new MyObj().createIntArray(10,int[]::new);
            System.out.println(arr.length);
        }
    
    }
  • 相关阅读:
    css3学习 之 css选择器(结构性伪类选择器)
    flash如何实现Enumeration
    带参数的正则匹配
    css学习记录(overflow:hidden)
    JavaScript的函数
    HTML5实现网站在windows8中的贴靠
    Modernizr 让网站进行优雅降级
    ASP.NET Web API教程(三) 增删改
    Compat Inspector 微软内部使用的兼容性检测工具
    Javascript 高级手势
  • 原文地址:https://www.cnblogs.com/liuyang-520/p/12907723.html
Copyright © 2011-2022 走看看