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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 茶念小手 中级黑马   /  2013-8-11 22:47  /  1131 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 茶念小手 于 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方法可以接收任意类型的参数吗!!!!
为什么我这样做编译器说类型不一致啊!!!

评分

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

查看全部评分

4 个回复

正序浏览
在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
               
}
这样就通过编译了
回复 使用道具 举报
只有引用类型才能作为泛型方法的实际参数  你传递的是int[] a 而你定义了int[] a =new int[]{1,1,1}相当于传递一个new int[]{1,1,1 }编译器不会对new int[]{1,1,1}中的int自动拆箱和装箱了,因为new int[]本身已经是对象了,你想要的有可能就是int数组呢?它装箱岂不弄巧成拙了。
回复 使用道具 举报
方法不是重点...重点在于参数类型
  1. int[] a =new int[]{1,1,1,};

  2.                int obj =2;

  3.                test(a, obj);

复制代码
这么做为什么不行啊
回复 使用道具 举报
  public static  <T> void test(T[] a,T obj){
               
        }
                你这个表达的是什么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马