我不理解我在这里的文档中看到的这个Java构造.

public static <T,U> HttpResponse.BodySubscriber mapping(HttpResponse.BodySubscriber upstream, Function<? super T,? extends U> mapper)

我认为我理解但似乎无法复制的部分是这个例子:

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.然而,当我自己try 编写这样的东西时,它不起作用.

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是一个接口.

我有什么不明白的?

推荐答案

HttpResponse.BodySubscribers.mapping将类型Function<? super T,​? extends U>的值作为第二个参数.在您的代码中,TInputStream,USupplier<W>,因此mapping的完整类型应该是(为简洁起见,忽略super\extends):

Function<InputStream, Supplier<W>>

由于Supplier<W>只有一个类型为W get()的方法,所以Supplier类型的lambda表达式应该是:

() -> {/* return a value of type W*/}

因此,mapper的lambda表达式为:

(InputStream is) -> () -> {/* return a value of type W*/}

符合你的密码

Java相关问答推荐

是否可以从@ TrustMapping中删除特定方法的基路径?

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

Mongo DB Bson和Java:在子文档中添加和返回仅存在于父文档中的字段?

了解Android Studio中的调试器输出

Jooq外键关系

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

Java inline Double条件和值解装箱崩溃

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

如何在带有Micronaut的YAML中使用包含特殊字符的字符串作为键

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

我可以在MacOS上使用什么Java函数来在适当的设备上以适当的音量播放适当的alert 声音?

WebSockets和Spring Boot安全性出现错误401

Java构造函数分支

如何在JavaFX中制作鼠标透明stage

我怎样才能让IntelliJ标记toString()的任何实现?

Android Java:已设置但未读取SharedPreferences

在Oracle db中,当我们提供字符串而不是数字时,比较是如何工作的?

Java System.getProperty在哪里检索user.home?

转换为JSON字符串时,日期按天递减-Java

对于 Hangman 游戏,索引 0 超出长度 0 的范围