Java中(InputStream is)->()->{} Lambda结构解析及编译报错排查
问题原因与解决办法
你的编译错误核心是Lambda类型不匹配,具体来说:
- 你写的
(String s)->()->{return s + "ddd";}是一个高阶Lambda:接收String后,返回另一个无参数的Lambda(本质是Supplier<String>类型)。 - 但你定义的
myMethod参数是Function<String, String>,它要求的是「接收String,直接返回String」的函数,不是返回一个函数的函数。
编译器报Target type of a lambda conversion must be an interface,是因为它无法把内层的()->{...}匹配到Function<String, String>要求的返回值类型(String),类型完全不兼容,导致解析失败。
对应你看到的HttpResponse示例的逻辑修正
如果想模仿HttpResponse.BodySubscribers.mapping的高阶Lambda结构,需要调整方法的参数类型,让它接受「返回函数的函数」:
public static void main(String[] args) throws IOException { // 调用后需要调用get()获取Supplier的结果 String r = myMethod((String s)->()->{return s + "ddd";}).get(); } // 参数改为Function<String, Supplier<String>>:接收String,返回Supplier<String> public static Supplier<String> myMethod(Function<String, Supplier<String>> func) { return func.apply("Hello"); }
如果只是想实现接收String返回String的逻辑
直接简化Lambda,去掉内层的函数结构即可:
public static void main(String[] args) throws IOException { String r = myMethod((String s)-> s + "ddd"); } public static String myMethod(Function<String, String> func) { return func.apply("Hello"); }
内容的提问来源于stack exchange,提问作者K.Nicholas
相关产品推荐
相关产品推荐

