首页 > 编程知识 正文

泛型的类型通配符,java的网络编程重要吗

时间:2023-05-04 22:39:29 阅读:115598 作者:753

在Java通用类型中使用通配符

Java从版本5开始引入了类属(generics )机制。 我们知道Java的泛型类型是普通的Java类型,如java.lang.String,java.io.File。 例如,以下两种变量的类型互不相同:

列表列表列表bj=new ArrayList (;

列表列表列表str=new ArrayList (;

字符串是Object的子类,但列表和列表之间并不存在——列表不是列表的子类或子类的关系。 下面的代码演示如何将具有List类型的变量分配给期望的List类型参数。 编译器在编译时报告编译错误。

import java.util.ArrayList;

import java.util.List;

公共类通用类型测试{

publicstaticvoidtestMTD{

}

publicstaticvoidmain (字符串[ ] args ) {

列表测试列表=new ArrayList;

//abovelinewillcauseacompileerror

测试列表(test MTD );

}

}

如果testMtd希望接受任意通用型参数,我们应该使用吗? 通配符满足这个要求。 List一种通用类型,即任意类型的对象数组。 可以将上述代码修改为:

publicstaticvoidtestMTD{

}

但是,在这种情况下,testMtd参数被接受的类型对于程序员设计的意图来说可能太宽了。 这是因为testMtd可能只希望接受AbstractList及其子类类型的变量,而不接受AbstractSet、Random和Locale等类型的变量。 通配符有限制。 幸运的是,Java 5的通用机制已经考虑到了这一点,可以使用“边界通配符”(bounded wildcard )格式满足这一要求。 让我们再次修改testMtd :

publicstaticvoidtestmtd (列表扩展数据库结构列表)。

}

这样可以将类型变量(如List和List )传递给testMtd方法,但将包含其他类型元素的List泛型变量传递给testMtd方法是非法的。 除了upper bounded wildcard之外,还可以使用“下边界通配符”(lower bounded wildcard ),如列表超级结构列表。

最后总结使用通配符的总称型的三种形式。

通用类型

通用型peextendsupperboundtype

通用型super lower bound type

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。