集合泛型通配符的一个小疑点,请问一下各位大侠
集合泛型通配符的一个小问题,请教一下各位大侠
为什么A 不能选啊?
------解决方案--------------------
这里list中存放继承String类的某一个子类,而继承String类的子类又不确定,你怎么就能决定list中add什么类型的数据呢。
就像一个人有三个孩子,你想给二儿子100块钱,现在你都不知道谁是二儿子,就知道他有三个儿子,你怎么给。
你肯定郁闷,老是觉得既然不能放字符串,D怎么就对了呢,这么给你说吧,你声明类型的时候是否可以用接口代替实现类,要是你很容易理解这个,那这个是同样道理,真不理解的话,你可以在list = new ArrayList<String>();后面继续写,list.add("xxoo");你会发现同样报错,以为这个泛型只是声明
为什么A 不能选啊?
------解决方案--------------------
List<? extends String> list你要理解这个形参的意思,是说你不加泛型,list里面可以存放任意类型的元素,但是一旦加上泛型作为类型限制,list就只能存放某种类型的数据。
这里list中存放继承String类的某一个子类,而继承String类的子类又不确定,你怎么就能决定list中add什么类型的数据呢。
就像一个人有三个孩子,你想给二儿子100块钱,现在你都不知道谁是二儿子,就知道他有三个儿子,你怎么给。
你肯定郁闷,老是觉得既然不能放字符串,D怎么就对了呢,这么给你说吧,你声明类型的时候是否可以用接口代替实现类,要是你很容易理解这个,那这个是同样道理,真不理解的话,你可以在list = new ArrayList<String>();后面继续写,list.add("xxoo");你会发现同样报错,以为这个泛型只是声明