为什么 Stream.Builder 有 add 和 accept 方法?

MC *_*ror 25 java java-stream

我正在使用 aStream.Builder并且我偶然发现这个接口同时具有方法accept(T t)add(T t). 唯一的区别是前者返回void,后者返回 a Stream.Builder

该文档甚至提到这些方法具有相同的默认实现:

默认实现的行为就像:

accept(t)
return this;
Run Code Online (Sandbox Code Playgroud)

请注意,他们忘记了分号,但那是另一回事了。

我的问题是:为什么他们有两种方法可以向流构建器添加内容?我认为这会使 API 变得混乱,我认为他们想避免这种情况

有什么令人信服的理由这样做吗?

Con*_*ion 34

我猜:

Stream.BuilderextendsConsumer<T>因此它必须实现该accept(T)方法。

但是accept(T)返回void,所以我认为他们add(T)为了方便而添加:构建器模式实现中的方法通常返回this能够链接构建并最终调用build().

  • 此外,将 StreamBuilder 视为构建器时,“add”是正确的名称(我敢打赌,如果我采访 100 名开发人员,询问“您会在流构建对象上调用该方法吗”,其中 99 人会说“add”,而不是一个)会说“接受”)。如果您将该构建者视为消费者,那么从完全不同的角度来看,突然“接受”是明智的。 (3认同)