关于Java泛型中的一个问题?

来源:百度知道 编辑:UC知道 时间:2024/07/07 05:51:29
各位,大师帮忙解决下面代码中提问的问题,小菜我将感激不尽!

import java.util.*;
public class Student {

void func(List<? extends String> list){
list.add("huajielobn"); //为什么会报错?
list=new ArrayList<String>(); //为什么不报错?
list=new ArrayList<Object>(); //为什么会报错?
Object o=list; //为什么不报错?

}

}

关于 List<? extends String> list
说明你的list 中存放的都是 String 的子类 但是String是final 的不可以被继承(可以查看String的源代码)
下面再分析下
list.add("huajielobn"); //为什么会报错?
"huajielobn"是String 并不是继承String的 所以他会报错参数类型不匹配

list=new ArrayList<String>(); //为什么不报错?
让一个接口指向他的实现类的引用 和 让一个父类指向它子类的引用 是一样的
list点出来的都是ArrayList实现List接口中的方法

list=new ArrayList<Object>(); //为什么会报错?
它和上一条语句形式是一样的 而你的list用了泛型 不能从Object转换为String

Object o=list; //为什么不报错?
Object 是一切类的基类 但这样 o对象只能调用list中继承了Object的方法

如果你想要list中存放字符串 只需要写List<String>就好了

1),list.add("huajielobn");不清楚。
2),当然不报错了,类型相同嘛。
3),既然<>中只能是String的子类,当然就不能用Object赋给它。
4),list是List对象,任何非Object类都是Object的子类,显然正确。