第15章 泛型

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第15章 泛型相关的知识,希望对你有一定的参考价值。

韩顺平_循序渐进学Java零基础_第15章 泛型(P554 - P568)

第15章 泛型

554. 泛型引入

  • 不使用泛型的弊端:
    1. 不能对加入到集合中的数据类型进行约束(不安全)
    2. 遍历集合时,需要进行显式类型转换,如果集合中数据量很大,效率低下
  • 使用泛型的好处:
    1. 编译时,检查元素的类型,提高了安全性
    2. 减少了类型转换的次数,提高了运行效率

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. 泛型内容梳理

以上是关于第15章 泛型的主要内容,如果未能解决你的问题,请参考以下文章

第6章 泛型

学习笔记导航

《Effective Java》第5章 泛型

第2章 增强for&泛型

学习笔记导航

学习笔记导航