0

0

Java泛型的上界和下界通配符怎么使用

王林

王林

发布时间:2023-05-20 08:23:01

|

1766人浏览过

|

来源于亿速云

转载

上界

泛型的上界指定了类型参数必须是某个类的子类或者实现了某个接口。它的语法形式为 t extends b,其中t是泛型类型参数,b是上界类型。例如,下面的代码展示了一个泛型类 box,它的类型参数t必须是 number 或其子类:

public class Box {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}

在上面的代码中,我们使用了 extends 关键字来指定泛型类型参数的上界类型,这意味着泛型类型参数必须是 Number 或其子类。这样,我们就可以使用 Box 类来存储 IntegerDoubleFloat 等类型的值,因为它们都是 Number 的子类。另外,通过使用泛型的上界,我们可以确保 Box 类的实例中只存储 Number 类型的值,避免了类型转换异常的风险。

在使用泛型的时候,如果我们传入一个类型不符合上界限制的参数,则会在编译时发生错误,例如:

Box box = new Box<>("Hello World");    // 编译错误:String 不是 Number 的子类

下界

泛型的下界指定了类型参数必须是某个类的超类或者是某个接口的实现类。它的语法形式为 T super B,其中T是泛型类型参数,B是下界类型。下面是一个示例,展示了一个泛型类 Box,它的类型参数T必须是 Object 或其超类:

public class Box {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}

在上面的代码中,我们使用了 super 关键字来指定泛型类型参数的下界类型,这意味着泛型类型参数必须是 Object 或其超类。这样,我们就可以使用 Box 类来存储 ObjectStringIntegerDouble 等类型的值,因为它们都是 Object 的子类。另外,通过使用泛型的下界,我们可以确保 Box 类的实例中存储的值都是 Object 类型,避免了类型转换异常的风险。

立即学习Java免费学习笔记(深入)”;

快剪辑
快剪辑

国内⼀体化视频⽣产平台

下载

在使用泛型的时候,如果我们传入一个类型不符合下界限制的参数,则会在编译时发生错误,例如:

Box box = new Box<>(123);    // 编译错误:Integer 不是 Object 的超类

上下界通配符

有时候,我们需要在泛型中同时使用上界和下界的限制,此时可以使用通配符 ? 来表示未知类型。例如,下面的代码展示了一个泛型方法 copy,它可以将一个数组的元素复制到另一个数组中:

public static  void copy(List src, List dest) {
    for (T t : src) {
        dest.add(t);
    }
}

在上面的代码中,我们使用了通配符 ? 来表示未知类型,它可以同时满足 src 参数是 T 类型或其子类,dest 参数是 T 类型或其超类的限制条件。这样,我们就可以将任意类型的元素复制到另一个列表中了。通过使用上下界通配符,我们可以更加灵活地定义泛型方法,同时保证类型安全。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

2

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

6

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

28

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

2

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

3

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.5万人学习

C# 教程
C# 教程

共94课时 | 6.8万人学习

Java 教程
Java 教程

共578课时 | 46.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号