阅读springboot源码 记录
关于 :: 双冒号
用stream的map简洁提取id,类似代码1
// 代码1
List<String> Ids = list.stream().map(Student::getId).collect(Collectors.toList())
// 代码2
List<String> Ids = list.stream().map(use->{
return use.getId();
}).collect(Collectors.toList())
之前以为代码1和代码2是一个意思,今天才意识到原来双冒号返回的是方法引用对象;
让我意识到这个问题的是看了SpringApplication.class源码的时候,有段代码很疑惑。
intitialize函数返回是null,在下面的foreach中,add的时候,都是null吗?
原来::返回的方法引用,并没有执行方法,而是方法作为参数传递下去。
// SpringApplication.class
private List<BootstrapRegistryInitializer> getBootstrapRegistryInitializersFromSpringFactories() {
ArrayList<BootstrapRegistryInitializer> initializers = new ArrayList();
this.getSpringFactoriesInstances(Bootstrapper.class)
.stream().map((bootstrapper) -> {
return bootstrapper::initialize;
}).forEach(initializers::add);
initializers.addAll(
this.getSpringFactoriesInstances(BootstrapRegistryInitializer.class)
);
return initializers;
}
// Bootstrapper.class
public interface Bootstrapper {
default void initialize(BootstrapRegistry registry) {
this.intitialize(registry);
}
/** @deprecated */
@Deprecated
void intitialize(BootstrapRegistry registry);
}
多看一些源代码,让知识点串起来,进一步理解代码的