加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java泛形

发布时间:2020-12-14 06:37:31 所属栏目:Java 来源:网络整理
导读:div class="para" style="font-size:14px; word-wrap:break-word; color:rgb(51,51,51); margin-bottom:15px; text-indent:28px; line-height:24px; zoom:1; font-family:arial,宋体,sans-serif" 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是

<div class="para" style="font-size:14px; word-wrap:break-word; color:rgb(51,51,51); margin-bottom:15px; text-indent:28px; line-height:24px; zoom:1; font-family:arial,宋体,sans-serif">
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为<a target="_blank" href="http://baike.baidu.com/view/2104244.htm" rel="nofollow" style="color:rgb(19,110,194); text-decoration:none">泛型类、泛型接口、泛型方法。?<a target="_blank" href="http://baike.baidu.com/view/229611.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">Java语言引入泛型的好处是安全简单。
<div class="para" style="font-size:14px; word-wrap:break-word; color:rgb(51,sans-serif">
在Java SE 1.5之前,没有泛型的<a target="_blank" href="http://baike.baidu.com/view/780206.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的<a target="_blank" href="http://baike.baidu.com/view/2886403.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">强制类型转换,而这种转换是要求开发者对<a target="_blank" href="http://baike.baidu.com/view/2245196.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,<a target="_blank" href="http://baike.baidu.com/view/487018.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
<div class="para" style="font-size:14px; word-wrap:break-word; color:rgb(51,sans-serif">
泛型的好处是在编译的时候检查<a target="_blank" href="http://baike.baidu.com/view/1965709.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">类型安全,并且所有的<a target="_blank" href="http://baike.baidu.com/view/965170.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">强制转换都是自动和<a target="_blank" href="http://baike.baidu.com/view/2852863.htm" rel="nofollow" style="color:rgb(19,194); text-decoration:none">隐式的,以提高代码的重用率。
<div class="para" style="font-size:14px; word-wrap:break-word; color:rgb(51,sans-serif">

。习惯上称为“有界类型”。
classType = Class.forName("java.lang.String");
??{
?
?
?
??
?
?
?intOb?=??(
?
?
?strOb?=?(
编辑
?{
?strFoo?=?(
?douFoo?=?(
?objFoo?=?(
来声明一个类型持有者名称,然后就可以把T当作一个类型代表来声明成员、参数和返回值类型。
声明了一个泛型类,这个T没有任何限制,实际上相当于Object类型,实际上相当于 class GenericsFoo
”来一并指定泛型类型持有者的真实类型。类如
douFoo=new GenericsFoo(new Double("33"));
类型持有者T的范围,实际上这里的限定类型相当于Object,这和“Object泛型”实质是一样的。限制比如我们要限制T为集合接口类型。只需要这么做:
,这样类中的泛型T只能是的实现类,传入非Collection接口编译会出错。
这里的限定使用extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现Collection接口的类型,或者T是继承了XX类的类型。
??{
改为CollectionGenFoo
?listFoo1?=?null;
这么定义类型的时候,就限定了构造此类实例的时候T是确定的一个类型,这个类型实现了Collection接口,但是实现 Collection接口的类很多很多,如果针对每一种都要写出具体的子类类型,那也太麻烦了,我干脆还不如用Object通用一下。别急,泛型针对这种情况还有更好的解决方案,那就是“泛型”。
?{
,“?”代表未知类型,这个类型是实现Collection接口。那么上面实现的方式可以写为:
?
?
?
?
?
?listFoo1?=?
?
?
?
,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。
,还可以向上限制,如,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。
?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读