Java学习基础笔记——泛型

第十六章 泛型

16.1 泛型

16.1.1 使用传统方法的问题分析

16.1.2 泛型的好处

16.2 泛型基本语法

16.2.1 泛型介绍

16.2.2 泛型的声明

16.2.3 泛型的实例化

16.2.4 泛型使用

16.3 自定义泛型

16.3.1 自定义泛型类

16.3.2 自定义泛型接口

16.3.3 自定义泛型方法

16.4 泛型的继承和通配符

第十六章 泛型

16.1 泛型

16.1.1 使用传统方法的问题分析

  • 不能对加入到集合 ArrayList 中的数据类型进行约束(不安全)

  • 遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响

16.1.2 泛型的好处

  • 编译时,检查添加元素的类型,提高了安全性

  • 减少了类型转换的次数,提高效率

  • 不再提示编译警告

16.2 泛型基本语法

16.2.1 泛型介绍

  • 泛型又称参数化类型,是Jdk5.0 出现的新特性,解决数据类型的安全性问题

  • 在类声明或实例化时只要指定好需要的具体的类型即可

  • Java 泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生 ClassCastException 异常。同时,代码更加简洁、健壮

  • 泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。

16.2.2 泛型的声明

interface 接口<T> {} 和 class 类 <K,V>{} //比如:List , ArrayList

  • 其中,T,K,V,不代表值,而是表示类型

  • 任意字母都可以。常用 T 表示,即 Type 的缩写

16.2.3 泛型的实例化

要在类名后面指定类型参数的值(类型)

  • List<String> strList = new ArrayList<String>();

  • Iterator<Customer> iterator = customers.iterator();

16.2.4 泛型使用

  • interface List<T>{}, public class HashSet<E>{}...

    • 说明:T、E 只能是引用类型 ,看看下面语句是否正确?

      • List<Integer> list = new ArrayList<Integer>(); //T

      • List<int> list2 = new ArrayList<int>(); //F

  • 在给泛型指定具体类型后,可以传入该类型或者其子类类型

  • 泛型使用形式

    • List<Integer> list2 = new ArrayList<>();

    • List<Integer> list1 = new ArrayList<Integer>();

  • 如果这样写 List list3 = new ArrayList(); // 默认给它的 泛型是 [<E> E 就是 Object]

16.3 自定义泛型

16.3.1 自定义泛型类

  • 基本语法

    class 类名<T、R...> { //....表示可以有多个泛型

    成员

    }

  • 注意

    • 普通成员可以使用泛型(属性、方法)

    • 使用泛型的数组,不能初始化

    • 静态方法中不能使用类的泛型

    • 泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)

    • 如果在创建对象时,没有指定类型,默认为Object

16.3.2 自定义泛型接口

  • 基本语法

    interface 接口名<T, R...> {

    }

  • 注意细节

    • 接口中,静态成员也不能使用泛型(这个和泛型类规定一样)

    • 泛型接口的类型,在继承接口或者实现接口时确定

    • 没有指定类型,默认为Object

16.3.3 自定义泛型方法

  • 基本语法

    修饰符 <T,R...> 返回类型 方法名(参数列表) {

    }

  • 注意细节

    • 泛型方法,可以定义在普通类中,也可以定义在泛型类中

    • 当泛型方法被调用时,类型会确定

    • public void eat(E e) {}, 修饰符后没有<T,R...> eat 方法不是泛型方法,而是使用了泛型

16.4 泛型的继承和通配符

  • 泛型的继承和通配符说明

    • 泛型不具备继承性List<Object> list = new ArrayList<String>();

    • <?>:支持任意泛型类型

    • <? extends A>:支持A类以及A类的子类,规定了泛型的上限

    • <? super A>:支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值