【8】java新特性,双冒号 :: 的使用场景

在使用双冒号前我们要先搞清楚一个问题:为什么要使用双冒号?也就是双冒号的作用是什么。
双冒号的设计初衷是为了化简Lambda表达式

 

【1】java8中引入了一个新的操作符  :: , 是两个英文半角的冒号, 这个操作符用来引用方法, 其本质也是对接口的一种重写。

【2】::操作符可以引用实例方法,也可以引用静态方法, 引用实例时::前面是实例, 引用静态方法时::前面是类

package Study;

import java.util.ArrayList;
import java.util.List;

public class TestLzw {
    protected interface commonFunc {
        void apply(String a);
    }

    public String doAdd(String a){
        System.out.println("---doAdd---" + a);
        return "";
    }

    public void addOne(String a){
        System.out.println("---addOne---" + a);
        addAll(a,this::doAdd);
    }

    public void addAll(String a, commonFunc commonFunc){
        System.out.println("---addAll---" + a);
        commonFunc.apply(a);  // 其实这里执行的就是doAdd
    }

    public static void main(String[] args) {
        System.out.println("示例一:");
        TestLzw test = new TestLzw();
        test.addOne("迪丽热巴");

        System.out.println("示例二:");
        List<String> names = new ArrayList<String>();
        names.add("Bush");
        names.add("Tom");
        names.add("Jim");

        TestLzw test1 = new TestLzw();
        names.forEach(System.out::println);

        System.out.println("引用实例前面是实例-----------------");
        names.forEach(test1::printRealName);

        System.out.println("引用静态方法前面是类----------------");
        names.forEach(TestLzw::printOtherName);
    }

    public void printRealName(String str) {
       System.out.println(str);
    }

    public static void printOtherName(String str) {
        System.out.println(str);
    }
}

 

  

 

 

 

参考:

https://www.cnblogs.com/maohuidong/p/11527681.html

https://www.jb51.net/article/188998.htm

posted @ 2021-03-06 18:31  欧阳图图的少年成长记  阅读(1245)  评论(0编辑  收藏  举报