You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何使用方法引用::创建对象并调用对应实例方法

问题原因

你写的(Myclass1::new)::print属于链式方法引用,Java语法不支持这种写法。方法引用::是用来直接将单个方法/构造器转换为对应函数式接口实例的语法糖,不能嵌套拼接使用,所以这段代码会直接编译报错。

另外你的代码还有一个隐含问题:Myclass1是非静态内部类,静态方法doWork无法直接实例化非静态内部类,需要先给Myclass1加static修饰符。


实现方案

你的需求完全可以实现,按照你尽量使用::运算符的要求,推荐拆分两步实现:

  1. 先用构造器引用Myclass1::new将流中的int元素转换为Myclass1实例
  2. 再用实例方法引用调用print方法

修改后的完整doWork代码如下:

public static void doWork(int[] nums) {
    Arrays.stream(nums)
          // 构造器引用:将每个int元素传入构造器生成Myclass1实例
          .mapToObj(Myclass1::new)
          // 实例方法引用:调用每个Myclass1实例的print方法
          .forEach(Myclass1::print);
}

同时修改Myclass1的修饰符:

// 加static修饰,支持静态方法中直接实例化
public static class Myclass1 implements MyInterf1 {
    // 原有内部逻辑保持不变
}

如果你不想拆分写流操作,也可以用lambda包装构造+调用的逻辑,仅构造环节使用方法引用:

Arrays.stream(nums).forEach(i -> new Myclass1(i).print());

补充说明

Java目前没有提供直接通过链式::一次性完成「对象创建+实例方法调用」的语法,这类场景要么拆分流操作分别使用方法引用,要么用lambda做外层包装。

内容的提问来源于stack exchange,提问作者CuriousMind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 16:48:04