零基础学习java------day14-----

1.泛型(jdk1.5以后出现)

https://www.cnblogs.com/lwbqqyumidi/p/3837629.html#!comments

1)为什么要用泛型?

  限制集合,让它只能存储某种类型的元素,如果不限制,集合(默认Object类型)中想存什么就存什么,这样在取元素的时候就会面临大量强制类型转换,这就很可能出现转换异常,为了解决这个问题,jdk1.5以后就出现泛型

  当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。因此,当我们取出集合元素时需要人为的强制类型转化到具体的目标类型,这就很容易很容易出现“java.lang.ClassCastException”异常

(2)泛型概述

  泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变化量话参数,此时类型也定义成参数形式(可称之为类型形参),然后在使用/调用时传入具体的类型(类型实参),一般用"<E>"表示。泛型只在编译时有效,在生成的.class文件中,会把泛型擦除掉。

(3)泛型定义

a  定义在类上

 若类在定义时没有加泛型时,则在创建对象时,不能使用泛型,如下图

零基础学习java------day14-----

此时Box定义时加上泛型,如下

public class GenericDemo {
    public static void main(String[] args) {
        Box<Integer> box = new Box<>(2);  //右边的尖括号内不需要写具体的可类型,jdk.7以后会根据左边自动识别出类型是什么
    }
}
class Box<T>{
    T t;              // T的类型是什么由创建对象时确定,如此处T就是Integer类型
    public Box(T t) {
        this.t = t;
    }
    public T getT() {
        return t;
    }
}

注意,类在创建对象时,不加泛型,默认是Object类型

b  定义在方法上(不常用)

  

 

上一篇:【Python数据结构与算法笔记day14】2.3. 顺序表的操作


下一篇:day14(力扣)位1的个数(python描述)