会计考友 发表于 2012-8-4 12:28:23

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

有经验的 Java 开发人员都知道写好 toString 体例很主要。对可用人类理解的形式查看的对象进行记实和调试都相当轻易;当措置分布式应用轨范时尤其是这样。不幸的是,为良多类实现 toString 体例可能相当耗时 -- 尤其是对于那些具有良多属性的类。因为 toString 的行为相当轨则,所以最好使建树该体例的使命能够自动完成。本文供给的这个适用轨范可以辅佐您实现这一点,同时也减轻了内在开发时的承担。介入年夜项目的开发人员凡是要花数个小时编心暌剐用的 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);if (!targetClass.isPrimitive() && targetClass != String.class)
  {
  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++) {
  output("buffer.append("" + fields.getName() + " = ");"); // 附加域名称if (fields.getType().isPrimitive()
页: [1]
查看完整版本: JAVA技巧:怎样使toString()的创建自动化