网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.解决中文问题的几个常用的函数.
.Java API for XML Parsing(JAXP).
.几行代码轻松搞定网页的简繁转换.
.网络数据流的java处理.
.SUN 的 Java 认证体系.
.使用Factory Method模式.
.j2ee性能调优之最小化资源压力测.
.实例:用Java的加密机制来保护你.
.Java入门(9) JAVA与GUI.
.使用Eclipse SWT控件开发WE.
.Java Applet给ActiveX跪下了.
.spring + hibernate 数据话持久层.
.Java新手入门需要掌握的30个基本.
.谈模式(SingletonPattern)的变形.
.Java修饰符之static.
.Java Servlet 编程及应用(一).
.一个正则表达式网站.
.在Hibernate中配置Proxool连接池.
.javazip_src_0.8alpha源代码发布.
.JAVA开发环境的安装及设定.

不使用泛型如何保证程序的可读性

发表日期:2008-1-5



作者杨中科是CowNew开源团队JDBMonitor项目组的开发人员。
CowNew开源团队网站 http://www.cownew.com
论坛 http://www.cownew.com/newpeng/
转载请注明此版权信息 
我个人是极力反对不必要的downcasting的,但是在使用Java的集合类的时候确是不可避免的,因为JDK5之前的集合中只能存储Object类型,所以看到一个List的时候,你也不知道里边放的是什么数据类型,只能胆战心惊的来下转型:Integer i = (Integer)list.get(i)。
好在JDK5可以使用泛型了,这个问题也就迎刃而解了。这样就再也不会去去问其他开发人员“你List里放的是什么类型的对象?”,再也不会望着一大堆以“老祖先”形式表现的object了发呆了,终于可以看到容器中存的这些对象的类型了。
但是在有的情况下我们还是不能使用JDK5的,比如你的正在开发的系统是基于JDK1.4的,那么迁移到JDK5是有一定风险的,或者你开发的模块要被JDK5一下的程序使用的,那么就暂时放弃JDK5的这个新特性了。
那么没有泛型我们就没法解决这个问题了吗?非也!鸟枪!呵呵。
一种方式是自己包装一下List写一个自己的专有数据类型的List,比如
class IntegerList()
{
   private List list;
   ......
   public void add(Integer i)
   {
     list.add(i);
   }
   public Integer get(int i)
   {
      return (Integer)list.get(i);
   } 
}
这样做的缺点就是对每个数据类型都要生成一个集合类,无疑加大了代码量。
另一种方式就是使用数组解决此问题,因为数组中的数据类型是清楚的,比如Integer[] ia = new Integer[5];,一眼就可以看出其中存储的是什么类型。
最好用的数据库监控、日志工具JDBMonitor就是通过这种方式解决此问题的。JDBMonitor的二进制jar包和源代码都可以从 http://www.cownew.com 下载得到。
打开com.cownew.JDBMonitor.jdbc.connect
定位到:
List lisList = configInfo.getListenerInfoList();
DBListenerInfo[] dbListenerInfos = new DBListenerInfo[lisList.size()];
for(int i=0,n=lisList.size();i<n;i++)
{
    DBListenerInfo lisInfo = (DBListenerInfo) lisList.get(i);
    dbListenerInfos[i] = lisInfo;
}     
return new DBConnection(cn,dbListenerInfos);   
程序把多个监听器对象信息DBListenerInfo拼转成DBListenerInfo数组,然后传递给DBConnection。
DBConnection接收到dbListenerInfos会把它转发给DBLogger做为其构造函数的参数:
private DBLogger(DBListenerInfo[] dbListenerInfos)
这样在DBLogger内部就可以很清楚的知道dbListenerInfos中的数据类型了:
for(int i=0,n=dbListenerInfos.length;i<n;i++)
{
   ...
   DBListenerInfo info = dbListenerInfos[i];
   ...
}

在系统的接口边界处传递的数据类型非常明确,不会因为传递一个光秃秃的List而不知道其类型,然后胆战心惊的进行类型转换了。
因此我认为在一个方法或者类的内部可以采用List等进行数据的处理,但是当需要与外部(相对于类来说就是其他类,相对于方法来说就是其他方法)交换多个同构对象的时候,最好转换成数组传递,这样就清楚多了。
上一篇:ChartDirector柱状图使用方法 人气:1536
下一篇:一些错误地解决方法 人气:692
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐