Java8可以使用一对冒号:: 来实现对方法引用
其语法有
构造器引用:它的语法是Class::new,或者更一般的Class< T >::new
静态方法引用:它的语法是Class::static_method
特定对象的方法引用:它的语法是instance::method
特定类的任意对象的方法引用:它的语法是Class::method
实例如下:
@Test
public void test03(){
List names = new ArrayList();
names.add("Google");
names.add("Runoob");
names.add("Taobao");
names.add("Baidu");
names.add("Sina");
// 使用::实现对特定类的方法
names.forEach(System.out::println);
}
Consumer函数式接口
可以参考:https://www.cnblogs.com/code-duck/p/13429524.html
Consumer的基本用法:
Consumer<String> consumer = (函数参数) -> {方法体}
在下列中 consumer 是对 println()方法的应用,使用上述基本用法则是:
Consumer<String> consumer = (String x) -> { synchronized (this) { print(x); newLine(); } } // 使用accept()方法接收参数 consumer.accept(x) // 然后执行方法体函数
对forEach源码分析
// 参考下列源码有
// 1、action是对PrintStream.println()方法的引用
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
// 2、接受参数 t ,调用方法println(String x)并执行
action.accept(t);
}
}
System类
public final class System {
public final static PrintStream out = null;
}
public class PrintStream.println
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}