方法参考不编译 - Integer::new
Method reference does not compile - Integer::new
为什么不能编译?
Stream.generate(Integer::new(1)).limit(10);
它给出了错误
Syntax error on token "new", AssignmentOperator expected after this token
当然,我可以将此表达式重写为
Stream.generate(() -> new Integer(1)).limit(10);
但我想知道第一个语句失败的原因...
您不能将参数显式传递给方法引用。它们只能隐式传递。
例如,如果您有一个 IntStream
,您可以使用 public Integer(int value)
构造函数的方法引用将它 mapToObj
到 Integer
个实例:
IntStream.of(1,1,1).mapToObj(Integer::new)...
当然,对较小的 int
值使用 public Integer(int value)
构造函数通常不是一个好主意,因为它可能会导致创建不必要的多个实例,这些实例都具有相同的 int
值,而不是利用 IntegerCache
,它缓存 Integer
个小值实例(-128 到 127)。
为什么不能编译?
Stream.generate(Integer::new(1)).limit(10);
它给出了错误
Syntax error on token "new", AssignmentOperator expected after this token
当然,我可以将此表达式重写为
Stream.generate(() -> new Integer(1)).limit(10);
但我想知道第一个语句失败的原因...
您不能将参数显式传递给方法引用。它们只能隐式传递。
例如,如果您有一个 IntStream
,您可以使用 public Integer(int value)
构造函数的方法引用将它 mapToObj
到 Integer
个实例:
IntStream.of(1,1,1).mapToObj(Integer::new)...
当然,对较小的 int
值使用 public Integer(int value)
构造函数通常不是一个好主意,因为它可能会导致创建不必要的多个实例,这些实例都具有相同的 int
值,而不是利用 IntegerCache
,它缓存 Integer
个小值实例(-128 到 127)。