欢迎光临
我们一直在努力

Java泛型核心知识点详解

本文详细讲解Java泛型核心知识点,涵盖泛型作用、泛型类、泛型方法、泛型接口、通配符、上下限、优缺点。

一、泛型概述

泛型就是参数化类型,把数据类型当作参数传递。
作用:

  • 在编译阶段检查类型,避免运行时类型转换异常
  • 避免强制类型转换,代码更简洁
  • 通用通用组件,提高代码复用性
  • 二、泛型的好处

    无泛型

    List list = new ArrayList();
    list.add("Java");
    list.add(100);

    // 取出必须强转
    String s = (String) list.get(0);

    有泛型

    List<String> list = new ArrayList<>();
    list.add("Java");
    // list.add(100); 编译报错,类型安全

    String s = list.get(0); // 无需强转


    三、泛型类

    把泛型定义在类上,类中方法可直接使用泛型。

    1. 定义泛型类

    // T:类型参数,可以是任意标识
    public class Box<T> {
    private T data;

    public T getData() {
    return data;
    }

    public void setData(T data) {
    this.data = data;
    }
    }

    2. 使用泛型类

    public class Test {
    public static void main(String[] args) {
    Box<String> box = new Box<>();
    box.setData("泛型测试");
    String s = box.getData();
    }
    }


    四、泛型方法

    把泛型定义在方法上,方法独立使用泛型。

    public class GenericMethod {
    // 泛型方法
    public <T> T show(T t) {
    System.out.println(t);
    return t;
    }
    }

    使用:

    show("Java");
    show(100);
    show(3.14);


    五、泛型接口

    把泛型定义在接口上。

    1. 定义泛型接口

    public interface MyInterface<T> {
    T test();
    }

    2. 实现方式1:指定具体类型

    public class TestImpl implements MyInterface<String> {
    @Override
    public String test() {
    return "指定类型";
    }
    }

    3. 实现方式2:保留泛型

    public class TestImpl2<T> implements MyInterface<T> {
    @Override
    public T test() {
    return null;
    }
    }


    六、泛型通配符

    1. 通配符:?

    表示任意类型

    public void show(List<?> list) {
    // 可以接收任意泛型List
    }

    2. 上限通配符:? extends T

    只允许 T 及 T 的子类

    // 接收Number或Number子类
    public void show(List<? extends Number> list) {}

    3. 下限通配符:? super T

    只允许 T 及 T 的父类

    // 接收Integer或Integer父类
    public void show(List<? super Integer> list) {}


    七、泛型常见命名规范

    • T:Type(类型)
    • E:Element(集合元素)
    • K:Key(键)
    • V:Value(值)
    • N:Number(数值)

    八、泛型注意事项

  • 泛型在编译时有效,运行时会被擦除
  • 泛型不能使用基本类型,必须使用包装类
  • 静态方法不能使用类泛型,必须自己定义
  • 泛型数组不能直接创建:new T[10]

  • 九、泛型使用场景

  • 集合类:List<T>、Map<K,V>
  • 通用工具类、通用结果返回类

  • 我是双栈小码哥,点赞+收藏+关注,希望本文能对您的学习和工作有所帮助。

    赞(0)
    未经允许不得转载:171主机测评 » Java泛型核心知识点详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址