Java泛型不可能赋值?

Eug*_*ene 3 java generics type-inference java-15

每次我认为我更好地理解泛型(并且无需编译即可回答)时,我会得到一个该理论被打破的例子。这是一个非常简单的例子:

static void consumer(List<? super List<String>> param) {
    System.out.println(param);
}
Run Code Online (Sandbox Code Playgroud)

和两个调用:

public static void main(String[] args) {
    List<String> list = List.of("123");
    consumer(list);
    consumer(List.of("123"));
}
Run Code Online (Sandbox Code Playgroud)

对我来说,没有一个调用应该编译。AString不是 的超类型List。尽管如此,第二个编译。但是让我们假设发生这种情况是因为编译器可以在这里推断出某种类型。当然这样的类型不存在,它会在运行时失败,对吧?对?不。它只是有效。因此,有人能给我的生活带来一些理智吗?

Eug*_*ene 9

啊该死!

javac  --debug=verboseResolution=all Sandbox.java
Run Code Online (Sandbox Code Playgroud)

显示consumer(List.of("123"))编译为:

instantiated signature: (Object)List<Object>
target-type: List<? super List<String>>
Run Code Online (Sandbox Code Playgroud)