
本文探讨Java中有限通配符的概念及其应用。有限通配符用于限制泛型类型参数,使其只能接受特定超类的子类对象。这在需要对特定类型对象进行操作的方法中非常实用。
让我们来看一个例子:
<code class="java">class A {
// ...
}
class B extends A {
// ...
}
class C extends A {
// ...
}
class D {
// ...
}
class Gen<T> {
T ob;
Gen(T o) { ob = o; }
}</code>这里,A 类被 B 和 C 类继承,但 D 类并非 A 的子类。Gen 类是一个简单的泛型类,其类型参数 T 未受限制。
为了创建一个仅接受 Gen<A> 或其子类对象的方法,我们需要使用有限通配符:
<code class="java">static void test(Gen<? extends A> o) {
// ...
}</code>? extends A 表示类型参数必须是 A 的子类(包括 A 本身)。
本系统有两种操作用户,一种为普通用户,一种为管理员。普通用户可以查看公告、查看规章制度、更改个人密码、查看部门信息、查看员工信息、发表留言、进行工作总结等等;管理员可以对规章制度管理、系统权限设置、操作记录查看、部门管理、员工管理、任务分配、留言管理、工资管理、合同管理等登录帐号admin 密码 admin
0
下面是一个使用有限通配符的完整示例:
<code class="java">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的子类
}
}</code>在 main 方法中,我们创建了 A、B、C 和 D 类型的对象,并分别创建了对应的 Gen 对象。 test 方法可以成功调用 w、w2 和 w3,因为它们的类型参数是 A 的子类。 但是,尝试使用 w4 调用 test 方法将会导致编译错误,因为 D 不是 A 的子类。
? extends A 设置了通配符的上限。 反之,? super A 则设置了下限,表示类型参数必须是 A 的超类(包括 A 本身)。 extends 和 super 子句都具有包容性,即上限和下限都包含基类本身。
通过使用有限通配符,我们可以编写更安全、更灵活的泛型代码,避免类型转换错误,并提高代码的可重用性。
以上就是有限的通配符的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号