黑马程序员技术交流社区
标题:
自定泛型出现的问题
[打印本页]
作者:
海中的游弋草
时间:
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