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)