当前位置: 代码迷 >> J2SE >> List<String>为什么不能赋值给List<Object>
  详细解决方案

List<String>为什么不能赋值给List<Object>

热度:51   发布时间:2016-04-23 20:36:53.0
List<String>为何不能赋值给List<Object>
本帖最后由 sparic 于 2014-06-20 17:03:04 编辑

public class Test {
public static void main(String[] args) {
List<String> a = null;
List<Object> bNew = a;
}
}

这段代码会报编译错误
Type mismatch: cannot convert from List<String> to List<Object>
请教大师原因为何?
------解决方案--------------------
泛型的类型要一样的。
这个是可以的。
 String  a = null;
         Object  bNew = a;

------解决方案--------------------
LIST集合里放的东西必须是一样的,是继承关系也不行
------解决方案--------------------
List<Object>是List<String>的父类?
如果你能找到依据,你再这么使用。
语法教你的只有Object是String的父类,泛型的地方就不适用。
------解决方案--------------------
List<Object> 和List<String> 其实是相同的东西,这里的Object 和 String 仅仅是给编译器做编译的时候检查用的。
这里的List<Object> 和List<String> 并没有什么父子类的关系,仅仅是表示一个用来装Obejct型对像,一个用来装String。
------解决方案--------------------
这种转换只能在子类与父类之间转换,虽然Object是String的父类,但是List<Object>和List<String>在编译器看来,是两种完全不同的东西,不允许你这样转换。

如果一定要这么转换,可以像下面这样。
	public static void main(String[] args) {
List<String> a = null;
List<Object> b = convert(a, Object.class);
}

@SuppressWarnings("unchecked")
public static <T> List<T> convert(List<?> list, Class<T> c) {
return (List<T>)list;
}
  相关解决方案