无法推断嵌套类型的类型变量T

肋骨:

我有以下方法:

public class Example {
    public CompletableFuture<Bar<InputStream>> methodA(CompletableFuture<InputStream> callback) {
        return methodB(new Foo(), this::mapper, callback);
    }

    private <T> CompletableFuture<Bar<T>> methodB(Foo request, Function<Foo, Bar<T>> mapper, CompletableFuture<Bar<T>> callback) {
        return null;
    }

    private Bar<InputStream> mapper(Foo foo) {
        return new Bar<>();
    }
}

从“ methodA”到“ methodB”的调用无法编译,因为:

Error:(9, 16) java: method methodB in class example.Example cannot be applied to given types;
  required: example.Foo,java.util.function.Function<example.Foo,example.Bar<T>>,java.util.concurrent.CompletableFuture<example.Bar<T>>
  found: example.Foo,this::mapper,java.util.concurrent.CompletableFuture<java.io.InputStream>
  reason: cannot infer type-variable(s) T
    (argument mismatch; java.util.concurrent.CompletableFuture<java.io.InputStream> cannot be converted to java.util.concurrent.CompletableFuture<example.Bar<T>>)

我了解(为什么)错误发生的原因。编译器似乎将未来的类型参数与函数的类型参数混淆了。我不确定该如何解决?“ methodB”的主体正确无误。

有趣的是,如果您致电

methodB(new Foo(), this::mapper, new CompletableFuture<>());

由于擦除,它工作正常。

雅各布·G:

“ methodB”的主体正确无误。

即使您这样说,的最后一个参数methodB本质上就是为什么您的代码无法编译的原因。由于某种原因,类型callback为a CompletableFuture<Bar<T>>,但是callback传递给参数methodA为a CompletableFuture<InputStream>,而an InputStream不是a Bar<T>

为了进行编译,可以更改methodB为以下内容:

private <T> CompletableFuture<Bar<T>> methodB(Foo request, Function<Foo, Bar<T>> mapper, CompletableFuture<T> callback) {
    return null;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章