争怎路由网:是一个主要分享无线路由器安装设置经验的网站,汇总WiFi常见问题的解决方法。

使toString() 的创建自动化

时间:2024/7/13作者:未知来源:争怎路由网人气:

参与大项目的开发人员通常要花数个小时编写有用的 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()

关键词:使toString() 的创建自动化




Copyright © 2012-2018 争怎路由网(http://www.zhengzen.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版