Java8-::双冒号的使用

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();
    }
}
原文地址:https://www.cnblogs.com/code-duck/p/13431137.html