韩顺平循序渐进学Java零基础 第15章 泛型
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了韩顺平循序渐进学Java零基础 第15章 泛型相关的知识,希望对你有一定的参考价值。
第15章 泛型
554. 泛型引入
- 不使用泛型的弊端:
- 不能对加入到集合中的数据类型进行约束(不安全)
- 遍历集合时,需要进行显式类型转换,如果集合中数据量很大,效率低下
- 使用泛型的好处:
- 编译时,检查元素的类型,提高了安全性
- 减少了类型转换的次数,提高了运行效率
555. 泛型入门
556. 泛型说明
- 泛型又称参数化类型,是 jdk 5.0 出现的新特性,解决数据类型的安全性问题
- 只需在类声明或实例化时执行具体需要的类型即可,编译期即可确定类型
- Java 泛型保证在编译期没有发出警告的代码,在运行阶段就不会发生类转换异常,使得代码更加简洁与健壮
- 泛型的作用:可以在类声明时通过一个标识符表示类中某个属性的类型,或者是某个方法的返回值类型,或者是参数类型
class Temp<E>
private E e;
public Temp(E e)
this.e = e;
public E m()
return e;
557. 泛型应用实例
import java.util.*;
/**
* @author Spring-_-Bear
* @version 2021-11-23 22:00
*/
public class GenericEx01
public static void main(String[] args)
HashMap<String, Student> hashMap = new HashMap<>(5);
hashMap.put("mary", new Student("mary", 2));
hashMap.put("kim", new Student("kim", 23));
Set<Map.Entry<String, Student>> entries = hashMap.entrySet();
Iterator<Map.Entry<String, Student>> iterator = entries.iterator();
while (iterator.hasNext())
Map.Entry<String, Student> next = iterator.next();
System.out.println(next.getKey() + " - " + next.getValue());
class Student
private String name;
private int age;
public Student(String name, int age)
this.name = name;
this.age = age;
@Override
public String toString()
return "Student" +
"name='" + name + '\\'' +
", age=" + age +
'';
558. 泛型使用细节1
- 指定泛型类型时只能是引用类型
- 在给泛型指定具体类型后,可以传入该类型或其子类类型
- 省略指定泛型类型时,默认填充 Object
559. 泛型使用细节2
560. 泛型课堂练习
561. 自定义泛型类
class ClassName<T,R,E···>
- 普通成员可以使用泛型(属性、方法)
- 使用泛型的数组,不能进行初始化
- 静态方法、静态字段中不能使用类的泛型
- 泛型类的类型,是在创建对象时确定的
- 如果在创建对象时,没有指定类型,默认为 Object
562. 自定义泛型接口
- 泛型接口的类型,在继承接口或是实现接口时确定
563. 自定义泛型方法
- 泛型方法可以定义在普通类中、也可以定义在泛型类中:调用方法时确定泛型类型
564. 泛型方法练习
565. 泛型继承和通配
- 泛型不具备继承性,即以下代码语法错误
// List<Object> lists = new ArrayList<String>();
- <?>:支持任意泛型类型
- <? extends A>:支持 A 类以及 A 的子类,规定了泛型的上限
- <? super A>:支持 A 类以及 A 的父类,不限定于直接父类,规定了泛型的下限
566. Junit使用
567. 泛型家庭作业
568. 泛型内容梳理
以上是关于韩顺平循序渐进学Java零基础 第15章 泛型的主要内容,如果未能解决你的问题,请参考以下文章