登录
首页 >  文章 >  java教程

有限的通配符

时间:2025-01-06 14:29:57 261浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《有限的通配符》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

有限的通配符

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

让我们来看一个例子:

class A {
    // ...
}

class B extends A {
    // ...
}

class C extends A {
    // ...
}

class D {
    // ...
}

class Gen<T> {
    T ob;
    Gen(T o) { ob = o; }
}

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

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

static void test(Gen<? extends A> o) {
    // ...
}

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

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

class UseBoundedWildcard {
    static void test(Gen<? extends A> 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<A> w = new Gen<>(a);
        Gen<B> w2 = new Gen<>(b);
        Gen<C> w3 = new Gen<>(c);
        Gen<D> 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 子句都具有包容性,即上限和下限都包含基类本身。

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

好了,本文到此结束,带大家了解了《有限的通配符》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>