黑马程序员技术交流社区

标题: 【Mr fan成长记】java基础之泛型 [打印本页]

作者: bjfanxc    时间: 2014-3-27 23:28
标题: 【Mr fan成长记】java基础之泛型
本帖最后由 bjfanxc 于 2014-4-1 16:45 编辑

如果ArrayList不加泛型的话,会提示:Type mismatch: cannot convert from element type Object to Data,这个是什么意思呢?
  1.         import java.util.ArrayList;

  2.         class Data {
  3.             int val;
  4.         }

  5.         public class Test {
  6.                   public static void main(String args[]) {
  7.                            Data data = new Data();
  8.                            ArrayList<Data> list = new ArrayList<Data>(); //将ArrayList加泛型,明确说明里面装的是Data类型

  9.                    for (int i = 100; i < 103; i++) {
  10.                            data.val = i;
  11.                            list.add(data);
  12.                    }

  13.                     for (Data d : list) {
  14.                           System.out.println(d.val);
  15.                    }
  16.              }
  17.       }
复制代码

作者: lwy0319    时间: 2014-3-28 02:29
我对ArrayList的认识就是<>中需要制定一个属于类的参数类型,而楼主这个貌似不算泛型。。
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. public class Text6 {
  4.         public static void main(String[] args){
  5.                 ArrayList<String> al=new ArrayList<String>();
  6.                 ArrayList<Integer> all=new ArrayList<Integer>();
  7.                 al.add("haha");
  8.                 al.add("hehe");
  9.                 all.add(30);
  10.                 all.add(20);
  11.                 fun(al);
  12.                 fun(all);
  13.         }
  14.         public static void fun(ArrayList<?> a){
  15.                 Iterator<?> it=a.iterator();
  16.                 while(it.hasNext()){
  17.                         System.out.println(it.next());
  18.                 }
  19.                 System.out.println(a.size());
  20.         }
  21. }
复制代码

这个是一个可以接受不同类型数据的泛型遍历输出方法的代码,可以给楼主参照
楼主的原代码没有实现遍历输出I的功能,我给改了下,希望你不要介意:
  1. import java.util.ArrayList;

  2. class Data {
  3.     int val;
  4. }

  5. public class Test {
  6.           public static void main(String args[]) {
  7.                    ArrayList<Integer> list = new ArrayList<Integer>();
  8.            for (int i = 100; i < 103; i++) {
  9.                    new Data().val = i;
  10.                    list.add(i);
  11.            }

  12.             for (Integer d : list) {
  13.                   System.out.println(d);
  14.            }
  15.      }
  16. }
复制代码




作者: haixian    时间: 2014-3-28 08:57
除了打印的那行有影响,不加泛型没问题。
作者: 清风木扬    时间: 2014-3-28 10:01
           import java.util.ArrayList;

       class Data {
           int val;
       }

        class Test45 {
                 public static void main(String args[]) {
                          Data data = new Data();
                          ArrayList list = new ArrayList(); //将ArrayList加泛型,明确说明里面装的是Data类型

                  for (int i = 100; i < 103; i++) {
                          data.val = i;
                          list.add(data);
                  }
                  //Type mismatch: cannot convert from element type Object to Data
                  // ArrayList不加泛型时默认存放的是Object类型,父到子要加类型转换。
                   for (Object d : list) {
                         System.out.println(((Data)d).val);
                  }
            }
     }
作者: 蒋珍珍    时间: 2014-3-31 11:41
这句话的含义就是:类型不匹配:不能从Object的元素类型转换为Data类型。
      其实在你注释的那句话上,不加泛型也可以,下面遍历list的时候用强制类型转换也是可以的。
      //改写后的代码
           for(Object obj: list){
                   Data d = (Data)obj;  //这里需要强制转换
                   System.out.println(d.val);
           }
作者: bjfanxc    时间: 2014-4-1 16:46
lwy0319 发表于 2014-3-28 02:29
我对ArrayList的认识就是中需要制定一个属于类的参数类型,而楼主这个貌似不算泛型。。

这个是一个可以接 ...

好的谢谢!




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