动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
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教程 ]的信息



本月文章推荐
.Java 技术在嵌入式系统中的应用详.
.深入MIDIet State Change Except.
.Java智能卡基础篇—未来Java平台.
.spring在MVC层解决JPA的缓迟加载.
.我的第一个j2me程序.
.Java中的functor实现.
.Java语言和C++语言的差异—老生常.
.Struts 框架之构建 Model组件.
.Java深入:在Eclipse中如何利用M.
.JavaScript如何与Applet通讯.
.Java语言已成为手机通讯标准 微软.
.深入解析Java的新特性assertion.
.Java正则表达式详解(下).
.关于Date和Calendar类的基础用法.
.使toString() 的创建自动化.
.JDK 和 J2EE 的安装.
.动画程序的设计原理.
.从.class文件中寻找类名.
.[JAVA100例]067、线程优先级.
.意外对象.

使toString() 的创建自动化

发表日期:2008-1-5 |



参与大项目的开发人员通常要花数个小时编写有用的 toString 方法。即便不为每个类都提供属于它们自己的 toString 方法,但每个数据容器都必须有自己的 toString 方法。让每个开发人员按他们自己的方法编写 toString 方法可能会造成混乱;每个开发人员无疑都会提出一种唯一的格式。结果,在调试过程中使用这样的输出将增添不必要的麻烦,而且也没有什么好处。因此,每个项目都应该为 toString 方法规定一种单一的格式,并使它们的创建自动化。
使 toString 的创建自动化
我下面将演示一个实用程序,您可用它来实现 toString 的自动创建。这个工具会自动为指定的类生成一个规则的、强健的 toString 方法,几乎消除了用于开发该方法的时间。它还对 toString() 的格式进行集中治理。假如您更改了格式,则必须重新生成 toString 方法;但是,这仍然比手动更改成百上千个类要轻易得多。

对生成的代码进行维护也很轻易。假如您在类中添加了更多的属性,则您也可能需要对 toString 方法作一些修改。因为 toString 方法是自动生成的,所以您只须再次对该类运行这个实用程序来完成更改。这比手动方法更简单,而且犯错误的可能性也较小。

代码
本文无意解释 Reflection API;下面的代码假定您已理解 Reflection 的基本概念。要查看 Reflection API 的文档,您可以访问参考资源部分。实用程序的源代码如下所示:

package fareed.publications.utilities;
import Java.lang.reflect.*;

public class ToStringGenerator
{
    public static void main(String[] args)
     {
       if (args.length == 0)
                {
                  System.out.println("Provide the class name as the command line argument");
                  System.exit(0);
                }

                try {

                Class targetClass = Class.forName(args[0]);

                if (!targetClass.isPrimitive() && targetClass != String.class)
                {
                        Field fields[] = targetClass.getDeclaredFields();

                        Class cSuper = targetClass.getSuperclass(); // 检索超类

                        output("StringBuffer buffer = new StringBuffer(500);"); // 构造缓冲区

                        if (cSuper != null && cSuper != Object.class) {
                          output("buffer.append(super.toString());"); // 超类的 toString()
                         }

                        for (int j = 0; j < fields.length; j++) {
                          output("buffer.append(\"" + fields[j].getName() + " = \");"); // 附加域名称

                          if (fields[j].getType().isPrimitive() fields[j].getType() == String.class) // 检查基本数据类型或字符串类型
                                output("buffer.append(this." + fields[j].getName() + ");"); // 附加基本数据类型域的值
                          else
                             {
                              /* 它“不是”基本数据类型域,所以需要检查聚集对象的 NULL 值 */
                              output("if ( this." + fields[j].getName() + "!= null )" );
                              output("buffer.append(this." + fields[j].getName() + ".toString());");
                              output("else buffer.append(\"value is null\"); ");
                             } // else 结束
                          } // 循环结束
                                 output("return buffer.toString();");
                }
               } catch (ClassNotFoundException e) {
                    System.out.println("Class not found in the class path");
                    System.exit(0);
              }
       }

   private static void output(String data)
     {
        System.out.println(data);
     }

}

代码输出通道
代码的格式还取决于您的项目工具需求。某些开发人员可能喜欢将这些代码存入磁盘上用户定义的文件中。而另一些开发人员对 system.out 控制台就很满足,他们可以利用控制台手动将这些代码复制或嵌入实际的文件中。我将这些选择权留给您,本文只使用最简单的方法:system.out 语句。

这种方法的局限性
这种方法有两个明显的局限性。第一个局限性是它不支持对象的循环包含。假如对象 A 包含对象 B 的一个引用,对象 B 又包含对象 A 的一个引用,则这个工具无法处理。但是,对于许多项目而言,这种情况很少出现。

第二个局限性是添加或减少成员变量之后要求重新生成 toString 方法。因为不管用不用这个工具都需要完成这一步,所以这不是工具特有的问题。

小结
在本文中,我说明了一个小型的自动实用程序,它可以真正提高开发人员的效率,就整个项目的工期而言,它起着很小但很重要的作用。


上一篇:使用Google的Web Service 人气:385
下一篇:在 Java 应用程序中计划重复执行的任务 人气:484
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-19 Roclog v3.1.4 SP1
2008-7-19 马克斯CMS(Maxcms) v1.1 Build 0
2008-7-19 乐学LBBS无限级目录图片直读系统
2008-7-19 PHP在线考试系统PPExam v1.2.5
2008-7-19 APJE私服发布系统 v2.0
2008-7-19 寻觅图书管理系统 v1.12
2008-7-19 寻觅学校管理系统
2008-7-19 义乌网站目录baidu新闻订阅 v1.0
2008-7-19 牛仔IIS日志蜘蛛爬行记录分析器
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵