Java中的所有通配符都可以替换为非通配符类型吗?

Oli*_*TIN 7 java generics wildcard

我找不到任何通配符不能替换通配符的示例.例如:

 public void dummy(List<? extends MyObject> list);
Run Code Online (Sandbox Code Playgroud)

相当于

 public <T> void dummy(List<T extends MyObject> list);
Run Code Online (Sandbox Code Playgroud)

要么

 public <T> List<? extends T> dummy2(List<? extends T> list);
Run Code Online (Sandbox Code Playgroud)

相当于

 public <T, U>  List<U extends T> dummy(List<U extends T> list);
Run Code Online (Sandbox Code Playgroud)

因此,我不承认为什么要​​创建通配符,因为泛型已经在完成这项工作.有什么想法或意见吗?

jpa*_*cek 7

不,它并不总是可以替换的.

List<? extends Reader> foo();
Run Code Online (Sandbox Code Playgroud)

不等于

<T> List<T extends Reader> foo();
Run Code Online (Sandbox Code Playgroud)

因为你不知道什么T时候打电话foo()(你不知道什么List<T>foo()回来.同样的事情也发生在你的第二个例子中.

使用通配符演示可以在这个(我的)答案中找到.