`
jiajunde
  • 浏览: 170158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

打印对象里的内容

J# 
阅读更多

import java.util.*;
import java.lang.reflect.*;

public class TypeUtil {

 /**
  * Returns a string holding the contents of the passed object,
  *
  * @param scope
  *            String
  * @param parentObject
  *            Object
  * @param visitedObjs
  *            List
  * @return String
  */

 private static String complexTypeToString(String scope,
   Object parentObject, List visitedObjs) {

  StringBuffer buffer = new StringBuffer("");

  try {
   //
   // Ok, now we need to reflect into the object and add its child
   // nodes...
   //

   Class cl = parentObject.getClass();
   while (cl != null) {

    processFields(cl.getDeclaredFields(), scope, parentObject,
      buffer, visitedObjs);

    cl = cl.getSuperclass();
   }
  } catch (IllegalAccessException iae) {
   buffer.append(iae.toString());
  }

  return (buffer.toString());
 }

 /**
  * Method processFields
  *
  * @param fields
  *            Field[]
  * @param scope
  *            String
  * @param parentObject
  *            Object
  * @param buffer
  *            StringBuffer
  * @param visitedObjs
  *            List
  * @throws IllegalAccessException
  */
 private static void processFields(Field[] fields, String scope,
   Object parentObject, StringBuffer buffer, List visitedObjs)
   throws IllegalAccessException {

  for (int i = 0; i < fields.length; i++) {

   //
   // Disregard certain fields for IDL structures
   //
   if (fields[i].getName().equals("__discriminator")
     || fields[i].getName().equals("__uninitialized")) {
    continue;
   }

   //
   // This allows us to see non-public fields. We might need to deal
   // with some
   // SecurityManager issues here once it is outside of VAJ...
   //
   fields[i].setAccessible(true);

   if (Modifier.isStatic(fields[i].getModifiers())) {
    //
    // Ignore all static members. The classes that this dehydrator
    // is
    // meant to handle are simple data objects, so static members
    // have no
    // bearing....
    //
   } else {
    buffer.append(typeToString(scope + "." + fields[i].getName(),
      fields[i].get(parentObject), visitedObjs));
   }
  }

 }

 /**
  * Method isCollectionType
  *
  * @param obj
  *            Object
  * @return boolean
  */
 public static boolean isCollectionType(Object obj) {

  return (obj.getClass().isArray() || (obj instanceof Collection)
    || (obj instanceof Hashtable) || (obj instanceof HashMap)
    || (obj instanceof HashSet) || (obj instanceof List) || (obj instanceof AbstractMap));
 }

 /**
  * Method isComplexType
  *
  * @param obj
  *            Object
  * @return boolean
  */
 public static boolean isComplexType(Object obj) {

  if (obj instanceof Boolean || obj instanceof Short
    || obj instanceof Byte || obj instanceof Integer
    || obj instanceof Long || obj instanceof Float
    || obj instanceof Character || obj instanceof Double
    || obj instanceof String) {

   return false;
  } else {

   Class objectClass = obj.getClass();

   if (objectClass == boolean.class || objectClass == Boolean.class
     || objectClass == short.class || objectClass == Short.class
     || objectClass == byte.class || objectClass == Byte.class
     || objectClass == int.class || objectClass == Integer.class
     || objectClass == long.class || objectClass == Long.class
     || objectClass == float.class || objectClass == Float.class
     || objectClass == char.class
     || objectClass == Character.class
     || objectClass == double.class
     || objectClass == Double.class
     || objectClass == String.class) {

    return false;

   }

   else {
    return true;
   }
  }
 }

 /**
  * Returns a string holding the contents of the passed object,
  *
  * @param scope
  *            String
  * @param obj
  *            Object
  * @param visitedObjs
  *            List
  * @return String
  */

 private static String collectionTypeToString(String scope, Object obj,
   List visitedObjs) {

  StringBuffer buffer = new StringBuffer("");

  if (obj.getClass().isArray()) {
   if (Array.getLength(obj) > 0) {

    for (int j = 0; j < Array.getLength(obj); j++) {

     Object x = Array.get(obj, j);

     buffer.append(typeToString(scope + "[" + j + "]", x,
       visitedObjs));
    }

   } else {
    buffer.append(scope + "[]: empty\n");
   }
  } else {
   boolean isCollection = (obj instanceof Collection);
   boolean isHashTable = (obj instanceof Hashtable);
   boolean isHashMap = (obj instanceof HashMap);
   boolean isHashSet = (obj instanceof HashSet);
   boolean isAbstractMap = (obj instanceof AbstractMap);
   boolean isMap = isAbstractMap || isHashMap || isHashTable;

   if (isMap) {
    Set keySet = ((Map) obj).keySet();
    Iterator iterator = keySet.iterator();
    int size = keySet.size();

    if (size > 0) {

     for (int j = 0; iterator.hasNext(); j++) {

      Object key = iterator.next();
      Object x = ((Map) obj).get(key);

      buffer.append(typeToString(scope + "[\"" + key + "\"]",
        x, visitedObjs));
     }
    } else {
     buffer.append(scope + "[]: empty\n");
    }
   } else if (/* isHashTable || */
   isCollection || isHashSet /* || isHashMap */
   ) {

    Iterator iterator = null;
    int size = 0;

    if (obj != null) {

     if (isCollection) {
      iterator = ((Collection) obj).iterator();
      size = ((Collection) obj).size();
     } else if (isHashTable) {
      iterator = ((Hashtable) obj).values().iterator();
      size = ((Hashtable) obj).size();
     } else if (isHashSet) {
      iterator = ((HashSet) obj).iterator();
      size = ((HashSet) obj).size();
     } else if (isHashMap) {
      iterator = ((HashMap) obj).values().iterator();
      size = ((HashMap) obj).size();
     }

     if (size > 0) {

      for (int j = 0; iterator.hasNext(); j++) {

       Object x = iterator.next();
       buffer.append(typeToString(scope + "[" + j + "]",
         x, visitedObjs));
      }
     } else {
      buffer.append(scope + "[]: empty\n");
     }
    } else {
     //
     // theObject is null
     buffer.append(scope + "[]: null\n");
    }
   }
  }

  return (buffer.toString());

 }

 /**
  * Method typeToString
  *
  * @param scope
  *            String
  * @param obj
  *            Object
  * @param visitedObjs
  *            List
  * @return String
  */
 private static String typeToString(String scope, Object obj,
   List visitedObjs) {

  if (obj == null) {
   return (scope + ": null\n");
  } else if (isCollectionType(obj)) {
   return collectionTypeToString(scope, obj, visitedObjs);
  } else if (isComplexType(obj)) {
   if (!visitedObjs.contains(obj)) {
    visitedObjs.add(obj);
    return complexTypeToString(scope, obj, visitedObjs);
   } else {
    return (scope + ": <already visited>\n");
   }
  } else {
   return (scope + ": " + obj.toString() + "\n");
  }
 }

 /**
  * The typeToString() method is used to dump the contents of a passed object
  * of any type (or collection) to a String. This can be very useful for
  * debugging code that manipulates complex structures.
  *
  * @param scope
  * @param obj
  *
  * @return String
  *
  */

 public static String typeToString(String scope, Object obj) {

  if (obj == null) {
   return (scope + ": null\n");
  } else if (isCollectionType(obj)) {
   return collectionTypeToString(scope, obj, new ArrayList());
  } else if (isComplexType(obj)) {
   return complexTypeToString(scope, obj, new ArrayList());
  } else {
   return (scope + ": " + obj.toString() + "\n");
  }
 }
 
 public static void main(String [] args){
  
  List list = new ArrayList();
  list.add("adf");
  list.add("adfccc");
  list.add("adfzxzc");
  
  System.out.println(TypeUtil.typeToString("list",list));
 }
}

分享到:
评论

相关推荐

    应用java反射机制打印一个对象.docx

    例如,在 XML 解析中,我们可能需要将 XML 文件中的数据注入到内存中的 Java 对象中,然后打印对象的所有属性值,以便 debug 和测试。 例如,假设我们有一个 `PredictData` 对象,它有多个属性,例如 `cityCode`、`...

    打印自定义复杂对象工具类

    这将会输出`obj`的所有信息,包括其内部的属性、嵌套的对象和数组内容,让开发者能够清晰地看到对象的全貌。 总的来说,“打印自定义复杂对象工具类”是Java开发中的一种实用辅助工具,通过提供详尽的对象表示,...

    脚本alert打印对象结构

    标题中的“脚本alert打印对象结构”指的是在JavaScript编程中,使用`alert`函数来显示一个对象的结构或内容。通常,当我们想要查看一个对象的所有属性和方法时,`console.log()`是常用的工具,但`alert()`也能提供...

    js调用iframe实现打印页面内容的方法

    4. 将iframe添加到页面的body中,并获取iframe的contentWindow.document对象,为打印做准备。 5. 将打印区域的内容写入iframe的文档中,可以通过添加link元素引入打印专用的CSS样式。 6. 将iframe聚焦,并调用`print...

    易语言打印当前窗口

    在易语言中,我们可能需要创建一个打印对象,这个对象可以理解为与打印机通信的中介,通过它来设置打印参数和发送打印命令。 3. **设置打印参数**: 设置打印参数包括纸张大小、方向(横向或纵向)、边距、页眉和...

    WPF 实现用PrintDialog将窗口内容全部打印出来

    为了将窗口内容打印出来,我们需要创建一个新的DrawingVisual,它是一个轻量级的绘图对象,可以用来绘制任何WPF图形。然后,我们将在DrawingContext中使用VisualBrush绘制窗口内容。 ```csharp DrawingVisual ...

    CAD中ole类型表格打印PDF无法显示的解决方法

    这样做的目的是为了确保表格在打印过程中能够清晰地呈现出来,避免因为色彩问题导致的部分内容丢失。 **步骤二:优化OLE对象的打印设置** 1. **进入CAD设置**:在CAD软件主界面中,点击“工具”菜单下的“选项”...

    打印机对象打印

    本文将深入探讨如何利用打印机对象进行行打印开发,以及与之相关的知识点。 首先,我们要了解VB中的`Printer`对象。这是一个内置的对象,可以直接在代码中引用,无需先创建实例。`Printer`对象提供了各种属性、方法...

    jsPDF打印超长内容

    总结来说,"jsPDF打印超长内容"这个话题涉及到利用jsPDF和html2canvas结合,通过修复或优化html2canvas来支持长内容的滚动打印,最终实现将整个网页内容转换为PDF文档。这需要对JavaScript、HTML、CSS以及相关库有...

    Delphi PrintText打印文本文件内容

    在Delphi编程环境中,PrintText函数常用于打印文本文件的内容。这个功能对于开发需要打印报告、日志或者用户文档的应用程序至关重要。本文将深入探讨如何使用Delphi的PrintText功能来实现这一目标,并涵盖相关的核心...

    dump类似alert的功能可以打印数组对象等

    在JavaScript编程中,"dump"功能提供了一种类似于"alert"的增强版打印服务,尤其在处理数组和对象时更为方便。"alert"函数通常用于简单地显示字符串信息,但当试图显示复杂的数据结构,如数组或对象时,它的能力就...

    VB.net打印RichTextBox中内容

    ### VB.NET 打印 RichTextBox 中的内容 在 VB.NET 中,打印 `RichTextBox` 控件中的文本是一项常见的需求。本文将详细介绍如何实现这一功能,并解释所给代码片段中涉及的关键概念和技术要点。 #### 1. 引入必要的...

    用JAVA设计面向对象的打印程序.rar_java 打印_java 打印程序_java面向对象_打印 设计

    8. 文件操作:打印程序可能需要读取文件进行打印,如`Document`对象可能从`.txt`, `.pdf`, `.docx`等文件中加载内容。Java的`java.io`包提供了丰富的文件操作类和方法。 通过以上这些知识点的运用,我们可以构建出...

    webprint打印插件对象

    WebPrint打印插件对象是一种专为网页打印设计的技术解决方案,它允许用户在浏览器环境中实现定制化的打印功能。这种插件通常作为一个对象嵌入到HTML页面中,为网页开发者提供了更高级别的控制,超越了标准浏览器打印...

    BarTender怎样批量打印EXCEL里的数据?

    很多时候,我们在BarTender条码打印软件里做标签时,涉及数据特别大,都保存在EXCLE表格里,那要怎么做,才可以使BarTender批量打印EXCEL数据呢?下面,小编就教教大家一种简单的批量打印标签的方法吧! 1. 在...

    VB中用printer对象打印表格[借鉴].pdf

    使用printer对象打印表格可以实现复杂的打印需求,并提供了许多有用的属性和方法来自定义打印格式和内容。 知识点: 1. 使用printer对象打印表格可以实现复杂的打印需求。 2. printer对象提供了许多属性和方法,如...

    VB打印ListView控件中的内容

    4. **绘制ListView内容**:由于ListView控件本身不支持直接打印,我们需要手动使用Graphics对象(来自Printer对象)来绘制列表视图的内容。例如,我们可以使用Graphics.DrawString方法绘制每一项和子项的文本。 5. ...

    使用PrintDocument控件和PrintDialog控件实现打印文档内容

    `PrintPage`事件是关键,当触发此事件时,你需要在这个事件处理程序中绘制要打印的内容。比如打印文本: ```csharp printDoc.PrintPage += (sender, e) =&gt; { e.Graphics.DrawString("Hello, World!", new Font...

    在对话框中实现打印预览并实现打印窗口内容的例子

    在本文中,我们将深入探讨如何在对话框中实现打印预览和打印窗口内容的功能,以一个基于Visual Studio 2005(MFC库)的实际例子进行阐述。首先,让我们理解对话框、打印、打印预览和打印窗口这些概念。 **对话框...

    js console.log打印对象时属性缺失的解决方法

    在本文中,将介绍在使用console.log()打印对象时可能出现的属性缺失问题以及解决这些问题的方法。 首先,需要明确在JavaScript中,当你打印一个对象到控制台时,你得到的是对象当前状态的一个快照。如果你在打印后...

Global site tag (gtag.js) - Google Analytics