首页 > Java > java教程 > 正文

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

王林
发布: 2023-05-20 08:23:01
转载
1758人浏览过

上界

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

public class Box<T extends Number> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}
登录后复制

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

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

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

下界

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

public class Box<T super Object> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}
登录后复制

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

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

码上飞
码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

码上飞 138
查看详情 码上飞

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

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

上下界通配符

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

public static <T> void copy(List<? extends T> src, List<? super T> dest) {
    for (T t : src) {
        dest.add(t);
    }
}
登录后复制

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

以上就是Java泛型的上界和下界通配符怎么使用的详细内容,更多请关注php中文网其它相关文章!

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

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

下载
来源:亿速云网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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