Java 为什么LongSummaryStatistics实现IntConsumer?

Java 为什么LongSummaryStatistics实现IntConsumer?,java,java-8,java-stream,Java,Java 8,Java Stream,当IntSummaryStatistics也实现了IntConsumer时,为什么longsummary statistics实现了IntConsumer,以便它可以接受int值和long值 例如,这允许您将其传递给需要IntConsumer的方法,以便抽象地使用一些int数据: LongSummaryStatistics lss = new LongSummaryStatistics(); someMethod(lss); void someMethod(IntConsumer consum

IntSummaryStatistics
也实现了
IntConsumer
时,为什么
longsummary statistics
实现了
IntConsumer
,以便它可以接受
int
值和
long

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

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

void someMethod(IntConsumer consumer) { ... }
没有真正的理由说明
longsummary statistics
不能用于此目的:
int
始终可以扩展到
long
,而不会丢失。但是,类型系统不允许将
lss
用作
someMethod
的参数,除非直接实现
longsummary statistics

确实,您可以使用lambda在不实现接口的情况下执行此操作:

someMethod(i -> lss.consume(i));

但是直接使用引用更简洁。

@nullpointer尝试定义一个不实现
IntConsumer
的类,然后将其传递给一个需要
IntConsumer
参数的方法。我不明白你所说的“为什么让使用者定义int和long的单独流,然后混合它们”是什么意思?流不是
*Summary Statistics
的唯一数据源,您可以直接调用这些方法。@AndyTurner感谢您共享此视图。我从来没有这样想过。我总是想知道,当accept(longi)也可以接受int时,为什么要实现IntConsumer accept(inti)