泛型

Posted Spring-_-Bear

tags:

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

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

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

Kotlin泛型 ① ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 )

Java 泛型泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )

Kotlin泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )

java泛型的一些知识点:Java泛型--泛型应用--泛型接口泛型方法泛型数组泛型嵌套

Kotlin泛型 ③ ( 泛型 out 协变 | 泛型 in 逆变 | 泛型 invariant 不变 | 泛型逆变协变代码示例 | 使用 reified 关键字检查泛型参数类型 )

java--泛型--泛型接口&泛型方法