黑马程序员技术交流社区

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

作者: 茶念小手    时间: 2013-8-11 22:47
标题: 泛型的一点问题
本帖最后由 茶念小手 于 2013-8-12 01:07 编辑
  1.         public static void main(String[] args) {
  2.                
  3.                 int[] a =new int[]{1,1,1,};
  4.                 int obj =2;
  5.                 test(a, obj);
  6.         
  7.         }
  8.         public static  <T> void test(T[] a,T obj){
  9.                
  10.         }
复制代码
张老师不是说这个Test方法可以接收任意类型的参数吗!!!!
为什么我这样做编译器说类型不一致啊!!!
作者: 曾文德    时间: 2013-8-11 22:52
  public static  <T> void test(T[] a,T obj){
               
        }
                你这个表达的是什么?
作者: 茶念小手    时间: 2013-8-11 23:19
方法不是重点...重点在于参数类型
  1. int[] a =new int[]{1,1,1,};

  2.                int obj =2;

  3.                test(a, obj);

复制代码
这么做为什么不行啊
作者: 钟佩桓    时间: 2013-8-11 23:51
只有引用类型才能作为泛型方法的实际参数  你传递的是int[] a 而你定义了int[] a =new int[]{1,1,1}相当于传递一个new int[]{1,1,1 }编译器不会对new int[]{1,1,1}中的int自动拆箱和装箱了,因为new int[]本身已经是对象了,你想要的有可能就是int数组呢?它装箱岂不弄巧成拙了。
作者: xuluheng718    时间: 2013-8-12 08:29
在JAVA中数组是不支持泛型的,数组在声明时候就确定类型了,假如不确定类型的数组只能用Object[] 进行收集

  1. <P>        public static void main(String[] args) {
  2.                
  3.                 int[] a =new int[]{1,1,1,};
  4.                 int obj =2;
  5.                 test(a, obj);
  6.         
  7.         }
  8.         public static  <T> void test(T[] a,T obj){ //你这里声明的数组T[] a ,并不是泛型,而是明确的对象T
  9.                
  10.         }</P>
复制代码
为了证明上面一点,现在声明一个T类
class T{
}
public static void main(String[] args) {
               
                T[]  t = {new T(),new T()};
                 int obj = 2;               
                test(t, obj);
        
}
public static  <T> void test(T[] a,T obj){ //你这里声明的数组T[] a ,并不是泛型,而是明确的对象T
               
}
这样就通过编译了





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