首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>Java基础>正文

J2SE综合介绍:泛型类型的子类及通配符使用

http://www.oklinux.cn  2008-01-20  来源: ccidnet baocl  会员收藏  游客收藏  【 】 

本文讲述以下几个方面的内容,试图说明泛型类型的子类及通配符的使用。
(1) 子类及替换原则;
(2) 使用extends要害字的通配符;
(3) 使用super要害字的通配符;


(1) 子类及替换原则
在java语言中,我们通俗讲一个类是另一个类的子类型,是通过使用extends要害字去继续某一个类或者使用implements要害字去实现某些接口。这样我们在编程时就可以面向接口或基类进行编程,如:
Number num1 = new Integer(1);
Number num2 = new Double(2.1d);

这个就是所谓的替换原则,替换原则的定义是:
Substitution Principle: a variable of a given type may be assigned a value of any subtype of that type, and a method with a parameter of a given type may be invoked with an argument of any subtype of that type.
大概的意思是说某种类型的变量可以被该类型的任何子类所赋值,一个方法中的参数也可以被该参数的任何子类进行调用。

现在我们再来看看泛型中替换原则的适用性:
Example2.1
List listNums = new ArrayList();
nums.add(10);
nums.add(8.88);

在example2.1中,可以看出替换原则被很好地应用在这里,ArrayList是List的子类,我们提供给listNums变量的类型参数为Number,往listNums中添加元素时,10被封箱为Integer类型,而Integer是Number的子类,第三行的情况类似。

Example2.2
List intList = new ArrayList();
List numList = intList; //compile error

numList.add(1.35); // can’t do that

根据替换原则,我们会很轻易想到,既然Integer是Number的子类,则我们应该可以将List的变量赋给List的变量,但从实际情况表明,List并不是List的子类。
我们不妨试想想,若果List类型的变量可以成功赋值给List类型的变量,会出现什么情况?我们可能在程序的某个位置添加一个double类型的元素进去numList中,而实质上在numList中其它元素都是Integer的类型的元素,这样就违反了泛型的初衷了。

有时,我们确实希望将形如List的List对象赋给List的变量,这时就要使用extends要害字的通配符。

(2) 使用extends要害字的通配符
Example2.3
List intList = new ArrayList();
List numList = intList();

numList.add(1.35); //compile error (can’t do that)

从Example2.3看到numList这个变量,我们可以将类型参数为Number及其Number子类的List赋给它。

记住一条规则假如你使用了”? extends T”,一般情况下,你不能往该数据结构中put元素,而你可以做的就是get元素。


假如要往内put元素,就需要使用下面提到的super要害字的通配符。



(3) 使用super要害字的通配符
Example2.4
List intList = new ArrayListList numList = intList;
numList.add(3); //can put integer or null

在example2.4我们可以看到的意思为,我们可以将类型参数为Integer或Integer超类的List赋给numList变量,并且可以put元素到列表中(注重:在该例子中put进的元素只能为Integer或null类型)。

一条比较通用的规则:假如要往List中put元素则用,假如要从List中get元素则用,假如既要get又要put则不使用通配符。


上一篇:【开发框架】struts标签使用举例-logic   下一篇:JFreeChart 如何设置水平和垂直渐变背景


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·【开发框架】struts标签使用举例-logic
·JFreeChart 如何设置水平和垂直渐变背景
·用JavaBean编写SQLServer数据库连接类
·通过JDBC连接oracle数据库的十大技巧
·Hibernate配置文件中的映射元素详解
·Webwork的validation校验框架实例详解
·JSP调用SQL server 2000存储过程
·使用WEBWORK实现文件上传方法实例详解
·JAVA高级--Socket编程中的一个秘密类
·JSP自定义标签由浅到深详细讲解(二)
·一个非常有趣的使用spring框架AOP例子
·JSP自定义标签由浅到深详细讲解(一)
·对于JSP中表单数据存储的一种通用方法
·全面解析Java中的类和对象的初始化过程
·加快JDBC中JSP数据库的访问速度
·EJB 3.0 的新规范概览及其未来发展方向
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Java入门:状态对象--数据库的替代者
·Java语言怎样调用外部应用程序
·Java语言深入--关于Java语言的内存泄漏
·JSP/Servlet/JSF:Servlet/JSP配置详解
·进阶-怎样使用AJAX进行WEB应用程序开发
·基础:J2ME程序开发之新手入门九大要点
·Java入门--Java语言接口与继承的本质
·JAVA进阶--如何提升JSP应用程序的效率
·对Java中四种XML解析技术之不完全测试
·编写高级 JScript应用代码
·JSP/Servlet/JSF--对标签库的深入研究
·Java入门--关于字符串分割的两种方法
  阅读排行
·使用AJAX技术实现网页无闪自动局部刷新
·快速教您Apache Tomcat SSL的配置
·Java语言深入--java调用C/C 的过程
·用JSP JavaScript打造二级级联下拉菜单
·JAVA进阶--线程运行栈信息的获取讲解
·使用WEBWORK实现文件上传方法实例详解
·J2SE综合--JAVA实现把汉字转化成拼音
·一个非常有趣的使用spring框架AOP例子
·关于java中相对路径,绝对路径问题总结
·高级:lucene全文检索应用示例及代码简
·详细讲解Struts构架中action的跳转大全
·Hibernate配置文件中的映射元素详解
·在Weblogic上配置JMS服务的方法
·对Java中四种XML解析技术之不完全测试
·在JSP环境中配置使用fckeditor详细讲解
网摘收藏: