赛迪网 > IT技术 Java > 头条列表
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2008.03.03 04:52     来源:赛迪网    作者:cownew

我个人是极力反对不必要的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{
    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{
   ...
   DBListenerInfo info = dbListenerInfos[i];
   ...
}

在系统的接口边界处传递的数据类型非常明确,不会因为传递一个光秃秃的List而不知道其类型,然后胆战心惊的进行类型转换了。
因此我认为在一个方法或者类的内部可以采用List等进行数据的处理,但是当需要与外部(相对于类来说就是其他类,相对于方法来说就是其他方法)交换多个同构对象的时候,最好转换成数组传递,这样就清晰多了。
       (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Hibernate的查询方式 (02-29) · 数据库相关--常用数据库JDBC连接写法 (02-28)
· 开发框架--对于IOC模式的思考和疑问 (02-28) · Java语言深入:C#与Java相似之处的对比 (02-28)
· 数据库:JDBMonitor在多数据源中的问题 (02-28) · JSP/Servlet:JSF导航规则与动作处理 (02-28)
· 一位老工程师给年轻程序员的“十大忠告” (02-28) · Java入门--高手对 CLASSPATH 的详解 (02-28)
· 程序人生:有挑战性的JAVA程序员面试32问 (02-28) · 编码讨论--关于JAVA乱码问题之终极解决 (02-28)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 网购人均消费超千元 B2C市场销售环比现负增长
· 北京成立信息安全应急中心 24小时防奥运黑客
· 智能交通08年覆盖京城 怎样加强企业流程优化
· 电子监考系统解决方案 企业信息安全解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统