黑马程序员技术交流社区

标题: 泛型问题 [打印本页]

作者: 曹冬明    时间: 2014-4-21 21:34
标题: 泛型问题
  1. import java.util.*;

  2. class GenericDemo
  3. {
  4.         public static void main(String[] args){
  5.                 copy1(new Integer[10],new String[10]);//为什么这一句就不报错呢,看了张老师的视频的解释,我理解困难
  6.                 copy2(new ArrayList<String>(),new Integer[10]);
  7.         }
  8.         private static <T> void copy1(T[] a, T[] b){
  9.                
  10.         }
  11.         private static <T> void copy2(ArrayList<T> a, T[] b){
  12.                
  13.         }
  14. }
复制代码

作者: ⒈心只霸占沵    时间: 2014-4-21 22:03
本帖最后由 ⒈心只霸占沵 于 2014-4-21 22:04 编辑
  1. package Other;

  2. import java.util.*;


  3. class GenericDemo
  4. {
  5.         public static void main(String[] args){
  6.                 copy1(new Integer[10],new String[10]);//为什么这一句就不报错呢,看了张老师的视频的解释,我理解困难
  7.                 copy2(new ArrayList<String>(),new Integer[10]);
  8.         }  
  9.          private static <T> void copy1(T[] a, T[] b){
  10.              /*这个方法,当你copy1(new Integer[10],new String[10]);这样调用的时候第一个参数为Integer[]类型,第二个参数为String[]类型,他会向上提取,就会去Integer[]和String[]的并集也就是Object[],这里就是多态的体现
  11.              */
  12.         }
  13.         private static <T> void copy2(ArrayList<T> a, T[] b){
  14.                 /*这个方法,当你copy2(new ArrayList<String>(),new Integer[10]),这样调用就已经把T定位String类型, 因为如果是泛型定义类型是这样的话  List<T> list=new ArrayList<String>();这个T必须是String类型,如果是其他类型编译不通过,所以T已经被new ArrayList<String>(),这个实参固定了类型,只能为String,所以第二个参数传递的时候传递Integer就会报错
  15.                 */
  16.         }
  17. }
复制代码

作者: 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