java8_双冒号
双冒号
双冒号实际上是返回了一个Consumer类型 import java.util.function.Consumer;
实例名::方法名 其中返回的Consumer代表传递的参数
package com.qbsea.knowledge.jdk8z;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
public class TwoColon {
public static void printStr(String str) {
System.out.println("this is "+str);
}
public static void main(String[] args) {
List<String> al = Arrays.asList("a","b","c","d");
//传统的打印
for (String string : al) {
printStr(string);
}
System.out.println("----");
//改进的打印
al.forEach(record -> printStr(record));
//双冒号的打印
System.out.println("--双冒号--");
al.forEach(TwoColon::printStr);
System.out.println("--双冒号1--");
Consumer<String> methodParam = TwoColon::printStr; //方法参数
al.forEach(x -> methodParam.accept(x));//方法执行accept
}
}
使用场景一代替type
原始代码:
public class Test {
public static void main(String[] args) {
//正常的代码
Test test = new Test();
//调用方法1
test.operationByType("busi001","inputParam1");
//调用方法2
test.operationByType("busi002","inputParam2");
//调用方法3
test.operationByType("busi003","inputParam3");
}
public void operationByType(String type,String inputParam) {
MyBuseiAService myBuseiAService = new MyBuseiAService();
if ("busi001".equals(type)) {
myBuseiAService.busi001(inputParam);
} else if ("busi002".equals(type)) {
myBuseiAService.busi002(inputParam);
} else if ("busi003".equals(type)) {
myBuseiAService.busi002(inputParam);
}
}
}
双冒号的代码
public class Test1 {
public static void main(String[] args) {
//正常的代码
Test1 test = new Test1();
//调用方法1
test.operationByType(MyBuseiAService::busi001,"inputParam1");
// //调用方法2
test.operationByType(MyBuseiAService::busi002,"inputParam2");
// //调用方法3
test.operationByType(MyBuseiAService::busi003,"inputParam3");
}
public void operationByType(BiConsumer<MyBuseiAService,String> consumer,String inputParam) {
MyBuseiAService myBuseiAService = new MyBuseiAService();
consumer.accept(myBuseiAService,inputParam);
}
}