码迷,mamicode.com
首页 > 编程语言 > 详细

什么是Java泛型(正在整理)

时间:2018-06-18 10:32:51      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:出现   变量   形式   问题:   cas   ict   erro   void   lis   

为什么要使用泛型?

引入例子

public class GenericTest {

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("qqyumidi");
        list.add("corn");
        list.add(100);

        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i); // 1
            System.out.println("name:" + name);
        }
    }
}

  

 上述代码在编译器没有问题,但在运行期间,将会报错。因为List的add方法的参数为object,如果不知道List类型时,通过强转获值,这时就会报错了。因为编译阶段正常,而运行时会出现“java.lang.ClassCastException”异常。因此,导致此类错误编码过程中不易发现。

 在如上的编码过程中,我们发现主要存在两个问题:

1.将对象放入集合的时候,集合不会记住对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但运行时的类型仍然是其本身类型。 

2.因此,//1处取出集合元素时要人为的强制转化到具体的目标类型,且很容易出现java.lang.ClassCastException异常

 

 (这个例子,是我在一篇博客里找的我能读懂的引入泛型的例子,可是我执行的时候报错了,错的内容是java:4: error: cannot find symbol,可能是我的jdk版本不对,我想把关于泛型的例子尽快整理完,这个错就暂时先放这里了。知道具体错的朋友,请在评论区给我留言,谢谢。)

怎么样才能让集合记住集合内部元素各个类型,且能够达到只要编译时不出现问题,运行时就不出现java.lang.ClassCastException异常呢?答案就是使用泛型。

 

 什么是泛型?

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么也将类型由原来的具体的类型参数化,类似于方法中的变量参数,类型也定义成参数形式(称之为类型形参),然后在使用时传入具体的类型(类型实参)

 

public class GenericTest {

    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("qqyumidi");
        list.add("corn");
        //list.add(100);   // 1  提示编译错误

        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i); // 2
            System.out.println("name:" + name);
        }
    }
}

  

 

 

什么是Java泛型(正在整理)

标签:出现   变量   形式   问题:   cas   ict   erro   void   lis   

原文地址:https://www.cnblogs.com/baxianhua/p/9194369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!