A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海中的游弋草 黑马帝   /  2011-12-21 10:41  /  1994 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 海中的游弋草 于 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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

倒序浏览
本来只有引用类型才可以作为泛型方法的实际参数,基本数据类型是不行的,某些情况下如果用基本数据类型可以,是因为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是不会为你自动装箱的,所以不行。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
{:soso_e142:}  你太给力! 谢谢呀  解释很好!
回复 使用道具 举报
但是  int[]  本身不是引用类型吗 ?
回复 使用道具 举报
海中的游弋草 发表于 2011-12-21 11:04
但是  int[]  本身不是引用类型吗 ?

谢谢楼主,刚刚查了资料,int[]是一种引用类型,
但我想:重点是Javac不能把数组里面的(里面的元素哟)基本数据类型自动装箱,所以不行,
但如果改成swap(new Integer[] { 1, 2, 3, 4, 5 }, 2, 3);这样就行了!首先指明里面存的是Integer对象。
回复 使用道具 举报
明白 谢谢啦  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马