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

Java 8方法引用:String::new对应String类的哪个方法?

解答你的Java方法引用问题

嘿,这个问题问到点子上了,咱们一步步拆解来搞清楚:

1. 执行的是String类的哪个方法?

你代码里的String::new这个方法引用,匹配的是String类里的单参数构造方法:

public String(String original)

这个构造方法的作用是接收一个String参数,创建并返回一个新的String对象(不过由于String的不可变性,实际传入字符串字面量时会复用常量池中的对象,但逻辑上确实调用了这个构造方法)。

2. Java运行时是否提供默认实现?

并没有。这里的逻辑是方法引用直接绑定到了String的对应构造方法,Java运行时只是帮你做了方法引用和函数式接口的适配工作——因为你的HelloWorld是一个函数式接口(只有一个抽象方法hello(String s)),它的方法签名(String) -> String刚好和String的单参数构造方法签名匹配,所以可以直接用String::new来赋值给这个接口的实例。

3. 是否默认调用了Supplier.get()方法?

完全不是。Supplier是一个无参的函数式接口,它的get()方法签名是() -> T,而你的HelloWorld.hello()方法是接收一个String参数的,两者签名完全不匹配,所以和Supplier没有任何关系。这里是直接适配了你自定义的HelloWorld接口。

补充一点小知识

方法引用类名::new的匹配规则是:Java会根据上下文(也就是你要赋值的函数式接口的抽象方法签名),自动寻找类中对应的构造方法——如果接口方法无参,就匹配无参构造;如果接口方法有一个参数,就匹配对应参数类型的构造方法,以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:06