该接口位于java.util.function
包,在java 8引入,主要用于函数式编程
也就是说,被该接口修饰的变量就是一个方法,该方法不接收任何参数,但是会返回一个Supplier<T>
所指定的泛型T
看下面的代码示例:
import java.util.function.Supplier;
class CopperCoin {
static final String DESCRIPTION = "This is a copper coin.";
public String getDescription() {
return DESCRIPTION;
}
}
public class Main {
public static void main(String args[]) {
Supplier<CopperCoin> randomValue = CopperCoin::new;
System.out.println(randomValue.get().getDescription());
}
}
注意看这一行:
Supplier<CopperCoin> randomValue = CopperCoin::new;
正常来讲呢,应该是一个lambda表达式的写法:
Supplier<CopperCoin> randomValue = () -> (new CopperCoin());
CopperCoin::new
是在java 8中引入的一个特性,可以让你的lambda表达式变得更加简洁
编译器会自动为这种形式的代码生成接口实现代码
在本例中,实现的是Supplier
接口的T get()
方法