a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 103|回复: 0

[其他] JAVA技巧:怎样使toString()的创建自动化

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
有经验的 Java 开发人员都知道写好 toString 体例很主要。对可用人类理解的形式查看的对象进行记实和调试都相当轻易;当措置分布式应用轨范时尤其是这样。不幸的是,为良多类实现 toString 体例可能相当耗时 -- 尤其是对于那些具有良多属性的类。因为 toString 的行为相当轨则,所以最好使建树该体例的使命能够自动完成。本文供给的这个适用轨范可以辅佐您实现这一点,同时也减轻了内在开发时的承担。介入年夜项目的开发人员凡是要花数个小时编心暌剐用的 toString 体例。即便不为每个类都供给属于它们自己的 toString 体例,但每个数据容器都必需有自己的 toString 体例。让每个开发人员按他们自己的体例编写 toString 体例可能会造成杂乱;每个开发人员无疑城市提出一种独一的名目。结不美观,在调试过程中使用这样的输出将增添不需要的麻烦,而且也没有什么益处。是以,每个项目都应该为 toString 体例划定一种单一的名目,并使它们的建树自动化。 使 toString 的建树自动化9 p% z' g, Q, \7 [4 _
  我下面将演示一个适用轨范,您可用它来实现 toString 的自动建树。这个工具会自动为指定的类生成一个轨则的、健旺的 toString 体例,几乎消弭了用于开发该体例的时刻。它还对 toString() 的名目进行集中打点。如不美观您更改了名目,则必需年夜头生成 toString 体例;可是,这仍然比手动更改成百上千个类要轻易得多。 对生成的代码进行维护也很轻易。如不美观内在类中添加了更多的属性,则您也可能需要对 toString 体例作一些改削。因为 toString 体例是自动生成的,所以您只须再次对该类运行这个适用轨范来完成更改。这比手动体例更简单,而且犯错误的可能性也较小。 代码. Y. K5 t: A6 n5 D4 T+ K
  本文无意诠释 Reflection API;下面的代码假定您已理解 Reflection 的根基概念。要查看 Reflection API 的文档,您可以访谒参考资本部门。适用轨范的源代码如下所示: package fareed.publications.utilities;% [3 B' \9 _4 p1 m
  import java.lang.reflect.*;public class ToStringGenerator) ~7 e  q- c( U! F
  {/ [% H# h2 ]0 q% g2 [8 S
  public static void main(String[] args)
5 i; e* p6 L& \. f+ `% C) I  {0 B5 q$ _$ U' J/ v/ t3 }- L
  if (args.length == 0)" e! I; B) D. U
  {
: K4 L9 i3 k2 I* a6 ~  System.out.println("Provide the class name as the command line argument");8 E# F" I1 k) h# Q# `
  System.exit(0);' r8 h( L* \+ G" T9 J; n
  }try {Class targetClass = Class.forName(args[0]);if (!targetClass.isPrimitive() && targetClass != String.class)
8 u5 @- Y  _& P( S+ `  {
# a2 Q+ G$ h; z& [( l  Field fields[] = targetClass.getDeclaredFields();Class cSuper = targetClass.getSuperclass(); // 检索超类output("StringBuffer buffer = new StringBuffer(500);"); // 机关缓冲区if (cSuper != null && cSuper != Objectfor (int j = 0; j < fields.length; j++) {6 B. c$ {1 l& t, p
  output("buffer.append("" + fields[j].getName() + " = ");"); // 附加域名称if (fields[j].getType().isPrimitive()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 00:41 , Processed in 0.189392 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表