当存在同时实现LongSummaryStatisticsIntConsumer时,为什么IntSummaryStatistics实现IntConsumer呢?

最佳答案

LongSummaryStatistics实现IntConsumer,以便它可以接受int值以及long值。

例如,这允许您将其传递给需要IntConsumer的方法,以便抽象地使用一些int数据:

LongSummaryStatistics lss = new LongSummaryStatistics();
someMethod(lss);

void someMethod(IntConsumer consumer) { ... }

没有真正的理由为什么不应为此目的使用LongSummaryStatistics:可以始终将int扩展为long而不会丢失。但是,类型系统将不允许将lss用作someMethod的参数,除非LongSummaryStatistics直接实现IntConsumer

没错,您可以使用lambda来执行此操作而无需实现接口(interface):
someMethod(i -> lss.consume(i));

但是直接使用引用有点整洁。

08-05 05:12