当前位置: 首页 > article >正文

java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性

在 Java 中,泛型通配符(?)用于表示未知类型,通常用于增强泛型的灵活性。通配符可以与上下限结合使用,以限制泛型的范围。以下是通配符及上下限的使用示例:


1. 无界通配符 (?)

无界通配符表示可以接受任意类型的泛型参数。

public static void printList(List<?> list) {
    for (Object element : list) {
        System.out.println(element);
    }
}
  • 示例调用:
    List<Integer> intList = Arrays.asList(1, 2, 3);
    List<String> stringList = Arrays.asList("Hello", "World");
    printList(intList);    // 输出: 1 2 3
    printList(stringList); // 输出: Hello World
    

2. 上界通配符 (<? extends T>)

上界通配符表示泛型类型必须是 T 或其子类。

public static double sumOfList(List<? extends Number> list) {
    double sum = 0.0;
    for (Number number : list) {
        sum += number.doubleValue();
    }
    return sum;
}
  • 示例调用:
    List<Integer> intList = Arrays.asList(1, 2, 3);
    List<Double> doubleList = Arrays.asList(1.1, 2.2, 3.3);
    System.out.println(sumOfList(intList));    // 输出: 6.0
    System.out.println(sumOfList(doubleList)); // 输出: 6.6
    

3. 下界通配符 (<? super T>)

下界通配符表示泛型类型必须是 T 或其父类。

public static void addNumbers(List<? super Integer> list) {
    list.add(1);
    list.add(2);
    list.add(3);
}
  • 示例调用:
    List<Number> numberList = new ArrayList<>();
    addNumbers(numberList);
    System.out.println(numberList); // 输出: [1, 2, 3]
    

4. 上下限通配符的综合使用

上下限通配符通常用于泛型类或方法中,以限制泛型类型的范围。

public static <T> void copy(List<? extends T> src, List<? super T> dest) {
    for (T item : src) {
        dest.add(item);
    }
}
  • 示例调用:
    List<Integer> srcList = Arrays.asList(1, 2, 3);
    List<Number> destList = new ArrayList<>();
    copy(srcList, destList);
    System.out.println(destList); // 输出: [1, 2, 3]
    

总结:

  1. ?:无界通配符,接受任意类型。
  2. <? extends T>:上界通配符,限制为 T 或其子类。
  3. <? super T>:下界通配符,限制为 T 或其父类。

通过合理使用通配符和上下限,可以增强泛型的灵活性,同时保证类型安全。


http://www.kler.cn/a/587416.html

相关文章:

  • VSCode C语言环境(多文件一键运行)
  • 面试求助:接口测试用例设计主要考虑哪些方面?
  • Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主机名
  • Java使用JDBC连接操作Sqlite 笔记250314
  • 工程化与框架系列(34)--前端重构技巧指南
  • 蓝耘携手通义万象 2.1 图生视频:开启创意无限的共享新时代
  • 基于Python+Flask+MySQL+HTML的爬取豆瓣电影top-250数据并进行可视化的数据可视化平台
  • 【论文精读】DifFace: Blind Face Restoration with Diffused Error Contraction
  • 【C++】如何高效掌握UDP数据包解析
  • 设计模式之责任链设计模式
  • 2.2.3 TCP—UDP-QUIC
  • 星越L_内后视镜使用讲解
  • 电子招采软件系统,如何实现10年可追溯审计
  • Spring、Spring Boot、Spring Cloud 的区别与联系
  • 矫平机:解锁精密制造的工业之手
  • (学习总结28)Linux 基本命令3
  • odbus TCP转Modbus RTU网关快速配置案例
  • 深入理解Spring MVC:构建灵活的Web应用
  • python3GUI--模仿安卓桌面 By:PyQt5(附下载地址)
  • 破碎的誓言