黑马程序员技术交流社区

标题: 自定泛型出现的问题 [打印本页]

作者: 海中的游弋草    时间: 2011-12-21 10:41
标题: 自定泛型出现的问题
本帖最后由 海中的游弋草 于 2011-12-21 12:18 编辑

public class c {

        /**
         * @param args
         */
        public static void main(String[] args) {

      add(3,5);//编译成功----而这个就可以是用泛型
      Number x1=add(3.5,3);
      float       f=add(3.5,3);//这个编译也不可以通过---这是什么情况?求助
      Object x2=add(3,"abc");
      
      swap(new String[]{"abc","xyz","yuanwenfei"},1,2);
      swap(new int[]{1,2,3,4,5},2,3);//编译失败 ----为什么这个是用泛型不可以呢?  求助
      
      
        }
       
       
        public static <T> T add(T a,T b)
        {
                  return null;
        }
        public static <T> void swap(T[] a,int i,int j)
        {
                  T tmp=a;
                    a=a[j];
                    a=tmp;
        }
}

作者: 小春同学    时间: 2011-12-21 10:59
本来只有引用类型才可以作为泛型方法的实际参数,基本数据类型是不行的,某些情况下如果用基本数据类型可以,是因为javac为你自动装箱了;
Number x1=add(3.5,3);;通过,是因为两个都自动装箱,一个Float,一个Integer,取“最小公倍数”,可以赋给Number;
float  f=add(3.5,3);失败,本来两个相加了成了Number型,你赋给小小的float,当然不行了;
swap(new int[]{1,2,3,4,5},2,3);失败,原理同上,基本数据类型本事是不能作为泛型方法的实际参数,而数组的使用javac是不会为你自动装箱的,所以不行。
作者: 海中的游弋草    时间: 2011-12-21 11:03
{:soso_e142:}  你太给力! 谢谢呀  解释很好!
作者: 海中的游弋草    时间: 2011-12-21 11:04
但是  int[]  本身不是引用类型吗 ?
作者: 小春同学    时间: 2011-12-21 11:21
海中的游弋草 发表于 2011-12-21 11:04
但是  int[]  本身不是引用类型吗 ?

谢谢楼主,刚刚查了资料,int[]是一种引用类型,
但我想:重点是Javac不能把数组里面的(里面的元素哟)基本数据类型自动装箱,所以不行,
但如果改成swap(new Integer[] { 1, 2, 3, 4, 5 }, 2, 3);这样就行了!首先指明里面存的是Integer对象。
作者: 海中的游弋草    时间: 2011-12-21 12:14
明白 谢谢啦  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2