gpt4 book ai didi

java - 在 com.google.inject.AbstractModule#configure(com.google.inject.Binder) 开头检查 null 状态的目的是什么

转载 作者:行者123 更新时间:2023-12-01 10:26:06 26 4
gpt4 key购买 nike

这是来自 google guice 的方法 com.google.inject.AbstractModule#configure(com.google.inject.Binder):

public final synchronized void configure(Binder builder) {
checkState(this.binder == null, "Re-entry is not allowed.");

this.binder = checkNotNull(builder, "builder");
try {
configure();
}
finally {
this.binder = null;
}
}

我想知道,由于该方法是同步的,所以第一条语句是否是必要的。也就是说,如果我们删除第一条语句,有什么区别吗?

编辑:这是com.google.inject.AbstractModule的源代码https://github.com/google/guice/blob/master/core/src/com/google/inject/AbstractModule.java

最佳答案

很清楚:“不允许重新进入。”,它不允许你调用两次configure。

您需要进行 null 检查,因为这是一个抽象类。如果configure()的实现调用configure(Builder),则可以再次进入该函数,因为它在同一个线程中运行,因此synchronized本身并不能确保不会重入。顺便说一句,synchronized 是空检查工作所必需的,因此您需要空检查和同步。

关于java - 在 com.google.inject.AbstractModule#configure(com.google.inject.Binder) 开头检查 null 状态的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35355666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com