黑马程序员技术交流社区
标题:
自定义泛型,有些疑惑。
[打印本页]
作者:
皮卫凯
时间:
2012-9-24 21:28
标题:
自定义泛型,有些疑惑。
本帖最后由 皮卫凯 于 2012-9-24 23:17 编辑
private static <T> viod swap (T[]a,int i,int j)
{
T tmp=a
;
a=a[j];
a[j]=tmp;
}
swap (new String[] {"abc","def","itheima"},1,2)
swap (new int[]{1,3,5,6,7,9},3,4)
定义一个泛型的交换方法
为什么第二句会报错。
第一句能执行,按理第二句也能执行啊。
张老师的视频中说到 编译器不会对new int [] 的 int自动的拆箱和装箱。与上面泛型的swap 有关系咩。
想不通了,求解答。
已经解答。
自定义泛型中的变量 T 是指一种不包括基本数据类型(char ,int ,boolean... )的类型
swap (new int[]{1,3,5,6,7,9},3,4)
应该改为
swap (new Integer[]{1,3,5,6,7,9},3,4)
谢谢大家。
作者:
尤圣回
时间:
2012-9-24 21:35
swap (new String[] {"abc","def","itheima"},1,2)
这一句你已经把泛型定义成了String
然后swap (new int[]{1,3,5,6,7,9},3,4)
泛型被擦写了 现在根本不知道他是不是Intent类型的 所以。。。。
作者:
黑马张旭明
时间:
2012-9-24 21:43
自定义泛型中的变量T是指一种不包括基本数据类型(int,char,boolean....)的类型。
swap (
T
[]a,int i,int j)
swap (new
int
[]{1,3,5,6,7,9},3,4)
这里把int型当成了T,显然T不包括8种基本数据类型。
张老师的视频中说到 编译器不会对new int [] 的 int自动的拆箱和装箱。
而Integer在这里就可以,但是编译器不会自动的把int[]变成Integer[],所以就编译失败了。
如果你改成
swap (new Integer[]{1,3,5,6,7,9},3,4);
这样就可以了。
作者:
柳彬
时间:
2012-9-24 22:14
这里swap (new int[]{1,3,5,6,7,9},3,4)报错是正常的,因为虽然泛型能完成自动装箱,但是int[]不能被识别为Integer【】的包装类,所以不会装箱为Integer[]所以这里把int【】改成Integer【】就可以了。另外阁下的代码有点问题;经本人纠正,代码如下:
package liu.test.eclipse;
public class SwapTest {
/**
* @param args
*/
public static void main(String[] args) {
String[] str=new String[]{"abc","def","itheima"};
Integer[] in=new Integer[]{1,3,5,6,7,9};
swap (str,1,2);
swap (in,3,4);
show(str);
show(in);
}
private static <T> void swap (T[]a,int i,int j)
{
T tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
private static <T> void show(T[]a){
for(T x:a)
System.out.println(x);
}
}
运行结果:
abc
itheima
def
1
3
5
7
6
9
作者:
佘天宇
时间:
2012-9-24 22:15
class Problem1
{
public static void main(String[] args)
{
String[] arr=new String[] {"abc","def","itheima"};
swap (arr,1,2);
//这是不行的额,泛型要是作用在对象的层面上,
//你在上面也说了,编译器不会对new int[]的 int自动的拆箱和装箱。
//int[] arr1=new int{1,3,5,6,7,9};
//所以需要声明数组中的是Integer对象
Integer[] arr1=new Integer[]{1,3,5,6,7,9};
swap (arr1,3,4);
}
public static <T> void swap (T[]a,int i,int j)
{
T tmp=a[i];
a[i]=a[j];
a[j]=tmp;
for(T t:a)
{
System.out.println(t);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2