【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); } }
参考:
做一个优秀的程序媛