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

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 或其父类。

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

相关文章:

  • GitHub Copilot 登录失败问题
  • 作业9 (2023-05-05 数组的定义和初始化)
  • 【C++】类和对象
  • leetcode51.N 皇后 回溯算法求解 + 效率优化
  • Idea运行项目报错:java.lang.OutOfMemoryError: Java heap space 解决方法
  • win32汇编环境,对话框程序中创建托盘示例一
  • SpringBoot请求权限控制——Shiro
  • 实验8 搜索技术
  • 《论分布式系统架构设计及其应用》架构师论文
  • C#中通过Response.Headers设置自定义参数
  • 【设计模式】原型模式
  • OpenCV图像加权函数:addWeighted
  • TSN CB:恢复算法与潜在错误检测
  • 动态规划----完全平方数(3种写法,逐步简化)
  • cursor中使用prettier-code formatter插件方法
  • 六十天前端强化训练之第十七天React Hooks 入门:useState 深度解析
  • 基于 GEE 利用 Sentinel-1 双极化数据计算 SDWI 指数实现逐月提取水域面积
  • CFD交易与传统股票交易在交易机制上存在哪些显著差异
  • 矩阵交换行(信息学奥赛一本通-1119)
  • Compose笔记(九)--Checkbox
  • 新剧|刘浩存“陷入我们的热恋”,沈月“开画少女漫”
  • 观察|脱欧5年后英欧再办峰会,多项突破性协议意味着什么?
  • 6月底将返回中国,旅日大熊猫获颁“感谢状”
  • 事关政府信息公开,最高法发布最新司法解释
  • 世卫大会中国代表团:中国深入参与全球卫生治理,为构建人类卫生健康共同体贡献中国力量
  • 上海一保租房社区亮相,首批546套房源可拎包入住