小编Flo*_*n M的帖子

使用下限通配符时不兼容的类型

我无法理解为什么我的代码有编译错误:

private static <T> Consumer<T> f3()
{
    return t -> {};
}

private static <T> Consumer<? super T> f4()
{
    return t -> {};
}


@Test
public void test()
{
    Consumer<Integer> action3 = f3();
    Consumer<Integer> action4 = f4(); // ERROR
}
Run Code Online (Sandbox Code Playgroud)

来自javac 1.8.0_161的错误:

错误:(84,36)java:不兼容类型:不T存在类型变量的实例,因此java.util.function.Consumer<? super T>符合java.util.function.Consumer<java.lang.Void>

谁能解释这个错误?谢谢.

编辑 我试图简化我的例子,我做错了太简单了.我感兴趣的是IntelliJ输出的这个错误的解释:

private static <T> BiConsumer<T, ? super Throwable> f1(Consumer<? super Throwable> consumer)
{
    return null;
}

private static <T> BiConsumer<? super T, ? super Throwable> f2(Consumer<? super …
Run Code Online (Sandbox Code Playgroud)

java generics bounded-wildcard

2
推荐指数
1
解决办法
289
查看次数

标签 统计

bounded-wildcard ×1

generics ×1

java ×1