《Java架构筑基》从Java基础讲起——泛型基础

一.泛型的概述

1.1 泛型由来

咱们的集合能够存储多种数据类型的元素,那么在存储的时候没有任何问题,可是在获取元素,并向下转型的时候,可能会存在一个错误,而这个错误就是ClassCastException . 很显然,集合的这种能够存储多种数据类型的元素的这个特色,不怎么友好 , 程序存在一些安全隐患,那么为了出来这种安全隐患,咱们应该限定一个集合存储元素的数据类型,咱们只让他存储统一中数据类型的元素,那么在作向下转型的是就不会存在这种安全隐患了. 怎么限定集合只能给我存储同一种数据类型的元素呢? 须要使用泛型。java

1.2 基本概述

  • 是一种把类型明确的工做推迟到建立对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型看成参数同样的传递。
  • 泛型的出现减小了不少强转的操做,同时避免了不少运行时的错误,在编译期完成检查类型转化

1.3 引入泛型的目的

了解引入泛型的动机,就先从语法糖开始了解。程序员

语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并无影响,可是更方便程序员使用。Java中最经常使用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。安全

1.4 泛型的目的

Java 泛型就是把一种语法糖,经过泛型使得在编译阶段完成一些类型转换的工做,避免在运行时强制类型转换而出现ClassCastException,即类型转换异常。ide

二.泛型初步探索

JDK 1.5 时才增长了泛型,并在很大程度上都是方便集合的使用,使其可以记住其元素的数据类型。优化

在泛型(Generic type或Generics)出现以前,是这么写代码的:博客设计

public static void main(String[] args){
    List list = new ArrayList();
    list.add("123");
    list.add("456");
    System.out.println((String)list.get(0));
}

固然这是彻底容许的,由于List里面的内容是Object类型的,天然任何对象类型均可以放入、均可以取出,可是这么写会有两个问题:code

  • 当一个对象放入集合时,集合不会记住此对象的类型,当再次从集合中取出此对象时,该对象的编译类型变成了Object。
  • 运行时须要人为地强制转换类型到具体目标,实际的程序毫不会这么简单,一个不当心就会出现java.lang.ClassCastException。
  • 因此,泛型出现以后,上面的代码就改为了你们都熟知的写法:
    public static void main(String[] args){
    List<String>
    list = new ArrayList<String>();
    list.add("123");
    list.add("456");
    System.out.println(list.get(0));
    }

    这就是泛型。对象

  • 泛型是对Java语言类型系统的一种扩展,有点相似于C++的模板,能够把类型参数看做是使用参数化类型时指定的类型的一个占位符。引入泛型,是对Java语言一个较大的功能加强,带来了不少的好处。

三.泛型的格式

3.1 泛型格式以下

  • <数据类型> 这里的数据类型只能是引用数据类型
  • <数据类型1 , 数据类型2 , ....>

四.泛型的好处

  • ①类型安全。类型错误如今在编译期间就被捕获到了,而不是在运行时看成java.lang.ClassCastException展现出来,将类型检查从运行时挪到编译时有助于开发者更容易找到错误,并提升程序的可靠性。
  • ②消除了代码中许多的强制类型转换,加强了代码的可读性。
  • ③为较大的优化带来了可能。优化了程序设计,解决了黄色警告线。
相关文章
相关标签/搜索