我正在尝试创建一个通用列表,它将包含从Object继承的任何类型的项(我假设每个对象都是object类型).
但是,在下面的例子中,当我尝试添加一个String(从对象继承)时,它在Eclipse中显示错误
Error:-The method add(capture#1-of ? extends Object) in the type List<capture#1-of ? extends Object> is not applicable for the arguments (String)
List<? extends Object> alist = new ArrayList<Object>();
alist.add("USA");
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么我会收到此错误吗?
原因是它<? extends Object>可能代表任何子类Object,可能与之无关String.它可能是List<Integer>.
List<? extends Object> alist = new ArrayList<Integer>(); // works
alist.add("USA"); // Should you be allowed to do this? No!
Run Code Online (Sandbox Code Playgroud)
对于类型安全,您不应该执行此类add操作.因此,不允许此操作.
解决方法是在变量声明中消除通配符:
List<Object> alist = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
现在Object可以传递任何或子类add.