我已经看到之前使用的通配符表示任何对象 - 但最近看到使用:
<? extends Object>
Run Code Online (Sandbox Code Playgroud)
由于所有对象都扩展了Object,这两个用法是同义词吗?
无界通配符<?>和绑定通配符之间是否有区别Object,例如<? extends Object>?
我记得曾经在某处看过,仿制药的早期草稿有所不同,但是找不到那个来源了.
请考虑以下代码:
import java.util.ArrayList;
import java.util.List;
public class UnboundedWildcardProblem {
public static void main(String[] args) {
List<?> a = new ArrayList();
List<? extends Object> b = new ArrayList();
}
}
Run Code Online (Sandbox Code Playgroud)
创建List<?>不会产生任何警告,但创建List<? extends Object>会产生未经检查的警告:
Warning: java: unchecked conversion
required: java.util.List<? extends java.lang.Object>
found: java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)
我搜索了可能的原因并找到了一些讨论:
列表<?> vs List <?extends Object>
<?>和<?之间有什么区别?在Java Generics中扩展Object>?
但是看完这些讨论后,在我看来,List<?>和List<? extends Object>有同样的事情.
那么,这种编译器行为的原因是什么?
编辑:
用于编译的单个标志是Xlint:unchecked标志.