方法引用不编译 - Integer :: new

时间:2016-07-14 10:24:25

标签: java java-8 method-reference

为什么不编译?

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

它给出错误

  

令牌“new”上的语法错误,此令牌后的AssignmentOperator

当然,我可以将此表达式重写为

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

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

1 个答案:

答案 0 :(得分:4)

您无法显式地将参数传递给方法引用。它们只能隐式传递。

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

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

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