二十四、JDK1.5新特性---泛型

        由于本人认知有限,泛型在使用上没有太大压力,但是尚未具备详细介绍泛型的能力,因此本文只是粗略的描述泛型的相关知识,在以后的学习过程中会对这篇文章进行修改,希望这篇文章不会给读者带来迷惑,特此声明

什么是泛型?

     泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

        泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入。

为什么要使用泛型

    在使用泛型之前,将存入集合中的元素可以是任意数据类型,当从集合中取出元素时,所以元素的类型都是Object类型,需要对元素进行向下强制转型,转换到特定的类型。比如:

        List myIntList = new LinkedList(); // 1

        myIntList.add(new Integer(0)); // 2

        Integer x = (Integer) myIntList.iterator().next(); // 3

第三行的这个强制类型转换可能会引起运行时的错误。

泛型的思想就是由程序员指定类型,这样集合就只能容纳该类型的元素

使用泛型:

        List<Integer> myIntList = new LinkedList<Integer>(); // 1'

        myIntList.add(new Integer(0)); // 2'

        Integer x = myIntList.iterator().next(); // 3'

将第三行的强制类型转换变为了第一行的List类型说明,编译器会为我们检查类型的正确性。这样,代码的可读性和健壮性也会增强。

泛型的好处

    1 类型安全:泛型的主要目标是提高java程序的类型安全,泛型定义的变量类型会受到限制,编译器可以在一个高得多的成都上进行验证类型的假设。没有泛型这些假设只能存在于程序员的头脑中。

    2 消除强制类型转换:泛型的一个附带的好处是,消除源代码中的许多强制类型的转化,这使得代码更加可读,减少出错的概率

    简而言之:泛型的出现,第一可以将运行时的错误提前到了编译时期,第二 减少了类型转化,简化了代码提高了阅读性。

泛型使用原则

     1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

        2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

        3、泛型的类型参数可以有多个。

        4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为"有界类型"。

        5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(Java.lang.String);

原文地址:https://www.cnblogs.com/yueyazhishang/p/4060733.html