泛型的基础知识整理

    技术2024-10-18  22

    泛型概述

    泛型就是将具体的类型参数化,将类型定义成参数形式,等到使用的时候再传入具体的类型。泛型可以使用在类、接口和方法中。

    泛型的优势:

    ①编译时检查代码的类型安全,从而减少出错的概率;

    ②消除了强制类型转换,没有泛型的返回值,我们可以认为是一个Object,在使用时需要对其进行强制转换,这样就可能会出现ClassCastException(类型转换异常)。

    泛型类

    定义格式:修饰符 class 类名<泛型变量>{ }。

    /** * @description: 动物类 * @author: Murphy * @date: 2020/7/37:41 上午 */ public class Animal<T> { public void method(T t) { System.out.println(t.getClass()); } } /** * @description: 狗类 * @author: Murphy * @date: 2020/7/37:43 上午 */ public class Dog { } /** * @description: 测试类 * @author: Murphy * @date: 2020/7/37:44 上午 */ public class Demo { public static void main(String[] args) { Animal<Dog> animal = new Animal<>(); animal.method(new Dog()); } }

    泛型类在创建对象时确定泛型。

    泛型方法

    定义格式:修饰符 <泛型变量> 返回值类型 方法名(参数) {方法体}。

    public void method(T t) { System.out.println(t.getClass()); }

    泛型方法在调用方法时确定泛型。

    泛型接口

    定义格式:修饰符 interface 接口名 <泛型变量> { }。

    /** * @description: 商品接口 * @author: Murphy * @date: 2020/7/38:10 上午 */ public interface GoodsInterface<E> { public abstract void method(E e); } 定义类时确定泛型 /** * @description: 商品接口的实现类 * @author: Murphy * @date: 2020/7/38:12 上午 */ public class Goods implements GoodsInterface<String> { @Override public void method(String e) { System.out.println(e); } } 创建对象时确定泛型的类型 /** * @description: 商品接口的实现类 * @author: Murphy * @date: 2020/7/38:12 上午 */ public class Goods<E> implements GoodsInterface<E> { @Override public void method(E e) { System.out.println(e); } } /** * @description: 测试类 * @author: Murphy * @date: 2020/7/37:44 上午 */ public class Demo { public static void main(String[] args) { Goods<String> goods = new Goods<>(); goods.method("创建对象时确定泛型"); } }

    泛型变量

    E(Element):元素;

    T(Type):类型;

    K(Key):键值;

    V(Value):Value值;

    ?:泛型通配符,代表一切类型,能接受一切但不能修改。

    泛型的上限:

    <? extends String>:只能接收String类及其子类。

    泛型的下限:

    <? super String>:只能接收String类及其父类。

    Processed: 0.010, SQL: 9