黑马程序员技术交流社区
标题:
泛型问题
[打印本页]
作者:
曹冬明
时间:
2014-4-21 21:34
标题:
泛型问题
import java.util.*;
class GenericDemo
{
public static void main(String[] args){
copy1(new Integer[10],new String[10]);//为什么这一句就不报错呢,看了张老师的视频的解释,我理解困难
copy2(new ArrayList<String>(),new Integer[10]);
}
private static <T> void copy1(T[] a, T[] b){
}
private static <T> void copy2(ArrayList<T> a, T[] b){
}
}
复制代码
作者:
⒈心只霸占沵
时间:
2014-4-21 22:03
本帖最后由 ⒈心只霸占沵 于 2014-4-21 22:04 编辑
package Other;
import java.util.*;
class GenericDemo
{
public static void main(String[] args){
copy1(new Integer[10],new String[10]);//为什么这一句就不报错呢,看了张老师的视频的解释,我理解困难
copy2(new ArrayList<String>(),new Integer[10]);
}
private static <T> void copy1(T[] a, T[] b){
/*这个方法,当你copy1(new Integer[10],new String[10]);这样调用的时候第一个参数为Integer[]类型,第二个参数为String[]类型,他会向上提取,就会去Integer[]和String[]的并集也就是Object[],这里就是多态的体现
*/
}
private static <T> void copy2(ArrayList<T> a, T[] b){
/*这个方法,当你copy2(new ArrayList<String>(),new Integer[10]),这样调用就已经把T定位String类型, 因为如果是泛型定义类型是这样的话 List<T> list=new ArrayList<String>();这个T必须是String类型,如果是其他类型编译不通过,所以T已经被new ArrayList<String>(),这个实参固定了类型,只能为String,所以第二个参数传递的时候传递Integer就会报错
*/
}
}
复制代码
作者:
heheka123
时间:
2014-4-21 22:13
copy1 方法的T 是可以理解成 都是 Object 而 copy2 则是 Integer 和 String 就成了 T 不是同一个类型了
作者:
曹冬明
时间:
2014-4-21 22:25
⒈心只霸占沵 发表于 2014-4-21 22:03
恩,明白了,是这么回事!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2