我不理解我在此处的文档中看到的 Java 构造。
public static
我认为我理解但似乎无法复制的部分是示例:
public static <W> HttpResponse.BodySubscriber<Supplier<W>> asJSON(Class<W> targetType) {
HttpResponse.BodySubscriber<InputStream> upstream = HttpResponse.BodySubscribers.ofInputStream();
HttpResponse.BodySubscriber<Supplier<W>> downstream = HttpResponse.BodySubscribers.mapping(
upstream,
(InputStream is) -> () -> {
try (InputStream stream = is) {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(stream, targetType);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
);
return downstream;
}
特别是
(InputStream is) -> () -> {
部分。当我读到它时,我认为它应该是一个 Supplier
,它提供了一个 Function
来完成它所做的事情。然而,当我尝试自己编写这样的代码时,它不起作用。
public static void main(String[] args) throws IOException {
String r = myMethod((String s)->()->{return s + "ddd";});
}
public static String myMethod(Function<String, String> func) {
return func.apply("Hello");
}
给我编译错误
Target type of a lambda conversion must be an interface
。然而,Function
是一个接口。
我不明白什么?
这不是一个函数
这是 lambda 表达式中的 lambda 表达式,您可以通过使用两个 -> 标记来查看它。在您的情况下,inputParam -> resultExpression,在这种情况下,resultExpression 本身是 () -> resultExpression。所以,是的,一个函数
我应该像这样模仿。
public static void main(String[] args) throws IOException {
Supplier<String> r = myMethod((String s)->()->{return s + "ddd";});
}
public static Supplier<String> myMethod(Function<String, Supplier<String>> func) {
return func.apply("Hello");
}
感谢所有评论者。