有限的通配符

有限的通配符

本文探讨Java中有限通配符的概念及其应用。有限通配符用于限制泛型类型参数,使其只能接受特定超类的子类对象。这在需要对特定类型对象进行操作的方法中非常实用。

让我们来看一个例子:

class A {    // ...}class B extends A {    // ...}class C extends A {    // ...}class D {    // ...}class Gen {    T ob;    Gen(T o) { ob = o; }}

这里,A 类被 BC 类继承,但 D 类并非 A 的子类。Gen 类是一个简单的泛型类,其类型参数 T 未受限制。

为了创建一个仅接受 Gen 或其子类对象的方法,我们需要使用有限通配符:

static void test(Gen o) {    // ...}

? extends A 表示类型参数必须是 A 的子类(包括 A 本身)。

琅琅配音 琅琅配音

全能AI配音神器

琅琅配音 208 查看详情 琅琅配音

下面是一个使用有限通配符的完整示例:

class UseBoundedWildcard {    static void test(Gen o) { // 使用有限通配符        // ...  (此处可以安全地操作o.ob,因为它保证是A或其子类)    }    public static void main(String args[]) {        A a = new A();        B b = new B();        C c = new C();        D d = new D();        Gen w = new Gen(a);        Gen w2 = new Gen(b);        Gen w3 = new Gen(c);        Gen w4 = new Gen(d);        test(w); // 有效        test(w2); // 有效        test(w3); // 有效        // test(w4); // 错误!w4的类型参数D不是A的子类    }}

main 方法中,我们创建了 ABCD 类型的对象,并分别创建了对应的 Gen 对象。 test 方法可以成功调用 ww2w3,因为它们的类型参数是 A 的子类。 但是,尝试使用 w4 调用 test 方法将会导致编译错误,因为 D 不是 A 的子类。

? extends A 设置了通配符的上限。 反之,? super A 则设置了下限,表示类型参数必须是 A 的超类(包括 A 本身)。 extendssuper 子句都具有包容性,即上限和下限都包含基类本身。

通过使用有限通配符,我们可以编写更安全、更灵活的泛型代码,避免类型转换错误,并提高代码的可重用性。

以上就是有限的通配符的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/366494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 05:31:24
下一篇 2025年11月6日 05:35:26

相关推荐

发表回复

登录后才能评论
关注微信