JDK8新特性

java1.8之supplier理解

 

supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码:

public class TestSupplier {
private int age;

TestSupplier(){
System.out.println(age);
}
public static void main(String[] args) {
//创建Supplier容器,声明为TestSupplier类型,此时并不会调用对象的构造方法,即不会创建对象
Supplier<TestSupplier> sup= TestSupplier::new;
System.out.println("--------");
//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
sup.get();
//每次get都会调用构造方法,即获取的对象不同
sup.get();
}
}
 

输出结果:

 

--------
0
0
 

官方代码及注释:

 

/**
* 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();
}
根据代码和官方注释,我的个人理解:

1.supplier是个接口,有一个get()方法

2.语法 :

Supplier<TestSupplier> sup= TestSupplier::new;
3.每次调用get()方法时都会调用构造方法创建一个新对象。

4、::new 是构造方法引用

转自:https://blog.csdn.net/qq_28393323/article/details/81003964

-----------------------------------------------------------------------------------------------

Java 8 特性 – 终极手册  转自:http://ifeve.com/java-8-features-tutorial/

-----------------------------------------------------------------------------------------------

JDK8新特性:Stream语法详解  https://www.cnblogs.com/2019lgg/p/11045468.html

posted @ 2019-10-12 17:18  奇异宝  阅读(342)  评论(0编辑  收藏  举报