JDK8之supplier
在使用方法引用的过程中,我们会不断的见到这个内建的函数式接口,首先我们来看一下源码
/**
* Represents a supplier of results.
*
* <p>There is no requirement that a new or distinct result be returned each
* time the supplier is invoked.
*
* <p>This is a <a href="package-summary.html">functional interface</a>
* whose functional method is {@link #get()}.
*
* @param <T> the type of results supplied by this supplier
*
* @since 1.8
*/
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
对应源码中的注释,使用demo:
public class SupplierDemo {
SupplierDemo(){
System.out.println(hashCode());
}
public static void main(String[] args) {
// 创建Supplier容器,声明为SupplierDemo类型,此时并不会调用对象的构造方法,即不会创建对象
Supplier<SupplierDemo> sup = SupplierDemo::new;
System.out.println("-----------");
//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
sup.get();
//每次get都会调用构造方法,创建一个新的对象
sup.get();
System.out.println("-----------");
}
}
输出结果
1831932724
1747585824