List为何不能赋值给List
口香糖先森 2014-06-20 05:02:01

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>
请教大师原因为何?
...全文
2573 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉小爷 2016-06-30
  • 打赏
  • 举报
回复
引用 8 楼 vnvlyp 的回复:
这种转换只能在子类与父类之间转换,虽然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;
	}
========== 这种写法什么意思?为什么这样就可以,请教解答 3q very much。
口香糖先森 2014-06-23
  • 打赏
  • 举报
回复
了解了,看来是概念不清楚,感谢各位!
vnvlyp 2014-06-20
  • 打赏
  • 举报
回复
这种转换只能在子类与父类之间转换,虽然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;
	}
O_森_O 2014-06-20
  • 打赏
  • 举报
回复
List<Object> 和List<String> 其实是相同的东西,这里的Object 和 String 仅仅是给编译器做编译的时候检查用的。 这里的List<Object> 和List<String> 并没有什么父子类的关系,仅仅是表示一个用来装Obejct型对像,一个用来装String。
口香糖先森 2014-06-20
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
泛型的类型要一样的。 这个是可以的。
 String  a = null;
         Object  bNew = a;
明白你的意思,但如果把List<Object>实例化成一个ArrayLIst<Object>的泛型,就没问题,且能运行正常。

String a = "a";
		Integer b = 1;
//        List<?> bNew = a;
        List<Object> t = new ArrayList<Object>();
        t.add(a);
        t.add(b);
        for(Object m : t) {
        	System.out.println(m);
        }
	}
这个又有什么概念在里面呢? 求各位大师指点!
ningbohezhijun 2014-06-20
  • 打赏
  • 举报
回复
List<Object>是List<String>的父类? 如果你能找到依据,你再这么使用。 语法教你的只有Object是String的父类,泛型的地方就不适用。
汉武平侯 2014-06-20
  • 打赏
  • 举报
回复
LIST集合里放的东西必须是一样的,是继承关系也不行
tony4geek 2014-06-20
  • 打赏
  • 举报
回复
泛型的类型要一样的。 这个是可以的。
 String  a = null;
         Object  bNew = a;
tony4geek 2014-06-20
  • 打赏
  • 举报
回复
List<String> a = null;
        List<?> bNew = a;
草原的雨夜 2014-06-20
  • 打赏
  • 举报
回复
泛型的类型不一致啊。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧