java - ReduceOps.makeRef 源代码中return 语句之后的这段代码有什么作用?
问题描述
在ReduceOps 类的 jdk8u 源代码中,第 155-190行(转载如下)构成了 makeRef 方法:
public static <T, I> TerminalOp<T, I>
makeRef(Collector<? super T, I, ?> collector) {
Supplier<I> supplier = Objects.requireNonNull(collector).supplier();
BiConsumer<I, ? super T> accumulator = collector.accumulator();
BinaryOperator<I> combiner = collector.combiner();
class ReducingSink extends Box<I>
implements AccumulatingSink<T, I, ReducingSink> {
@Override
public void begin(long size) {
state = supplier.get();
}
@Override
public void accept(T t) {
accumulator.accept(state, t);
}
@Override
public void combine(ReducingSink other) {
state = combiner.apply(state, other.state);
}
}
return new ReduceOp<T, I, ReducingSink>(StreamShape.REFERENCE) {
@Override
public ReducingSink makeSink() {
return new ReducingSink();
}
@Override
public int getOpFlags() {
return collector.characteristics().contains(Collector.Characteristics.UNORDERED)
? StreamOpFlag.NOT_ORDERED
: 0;
}
};
}
我明确询问第 177-189 行:
return new ReduceOp<T, I, ReducingSink>(StreamShape.REFERENCE) {
@Override
public ReducingSink makeSink() {
return new ReducingSink();
}
@Override
public int getOpFlags() {
return collector.characteristics().contains(Collector.Characteristics.UNORDERED)
? StreamOpFlag.NOT_ORDERED
: 0;
}
};
return 语句之后的代码做了什么(为什么它不是不可访问的)?我猜它正在做一些事情,比如从一个名为 ReduceOp 的接口覆盖一些方法,但似乎这样的接口(如果存在)与许多其他相关接口不在同一个地方。
解决方案
推荐阅读
- react-native - 后退按钮处理程序没有被调用本机反应
- javascript - 如何每十分钟获取一次日期数据
- java - 替代阿帕奇河?
- python - 哪种格式的文档字符串是标准的?
- visual-studio - 如何编辑 Visual Studio 为我创建的 ico 文件?
- python-3.x - 有什么建议可以让 python 代码更快吗?
- laravel - laravel - 重置多个帐户的密码
- python - 获取一个列表并打印所有不等于 0 的元素的索引
- azure-devops - 在 Azure DevOps 中排队生成给我一个错误“进程无法访问文件......”
- javascript - 计算 4x4 矩阵的行列式 - (RayTracer 挑战) - Javascript