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

标签 java java-8 method-reference

为什么不能编译?

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 的方法引用将它mapToObjInteger 实例整数(整数值)构造函数:

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

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

关于java - 方法引用不编译 - Integer::new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371703/

相关文章:

java - 如何在 Java 中将扫描器字符串制作成 Stream?

Java 8+ 映射列表映射

java - 减少对象列表中的整数属性

Java 局部静态方法引用速记语法

java - 如何更改 Eclipse 默认类路径

java - 纹理颜色错误

java - 如何将 lambda 表达式更改为方法引用

java - 为什么 IntFunction 中不支持函数组合

java - 在Spring项目中启动Sub SpringBootApplication进行微服务

java - 生成并输出所有可能的组合,每个唯一项仅从三个 List<String> 一次