方法引用不编译

为什么不能编译?

Stream.generate(Integer::new(1)).limit(10);

它给出了错误

对令牌“新”的语法错误,AssignmentOperator在该令牌之后预期

当然,我可以重写这个表达式

Stream.generate(() -> new Integer(1)).limit(10);

但我想知道第一个陈述失败的原因......


您不能明确地将参数传递给方法引用。 他们只能隐式传递。

例如,如果您有IntStream ,则可以使用public Integer(int value)构造函数的方法引用将它mapToObjInteger实例:

IntStream.of(1,1,1).mapToObj(Integer::new)...

当然,对于小的int值使用public Integer(int value)构造函数通常是一个坏主意,因为它可能会导致创建具有相同int值的不必要的多个实例,而不是利用IntegerCache ,哪些缓存Integer小值的实例(-128至127)。

链接地址: http://www.djcxy.com/p/59505.html

上一篇: Method reference does not compile

下一篇: Generic return type upper bound