- 浏览: 1605279 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
TypeUtil
它的typeToString(String scope, Object obj)方法,采用java的reflect机制,可以打印出任何对象的内容.
这对调试程序非常有用.
使用方法:
如果你有一个对象(比如testClassObject),想打印它的内容,可用如下方法:
System.out.println(TypeUtil.typeToString("yourClassObjectName",testClassObject));
这个方法,对调试那些对容器依赖的ejb程序很有用,特此备份.
以下为TypeUtil源程序:
java 代码
- /**
- * The TypeUtil class static methods for inspecting complex java types.
- * 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.
- *
- *
- * @version $Revision : 1.2.6.4 $
- */
- 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");
- }
- }
- }
发表评论
-
SpringBoot Fat Jar解压运行
2018-06-28 21:40 2254SpringBoot已经成为当前最流行的微服务 ... -
一句话实现五星评分显示
2018-06-05 08:31 988Python: rate = 1 #rate 取值 ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 33088Blockly - 来自Google的可 ... -
安卓动态分析工具 Inspeckage
2017-08-07 08:46 0工具介绍 一个基于Xposed 开发的应用动态分析工具 g ... -
Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息
2017-08-07 08:37 0一、猜想数据存放路径 微信现在是老少皆宜,大街小巷都在使用 ... -
破解微信数据库 并查询数据上传服务器
2017-08-07 08:29 0由于工作需求破解了微信的数据库 并获取想要的信息上传服 ... -
安卓黑科技之HOOK详解
2017-08-07 08:21 0本文带大家进入到安卓另一个世界 互联网攻防大战 Xpos ... -
安卓逆向之基于Xposed-ZjDroid脱壳
2017-08-07 08:18 0前言 之前介绍了普通常见的反编译模式 但对于使用了 360 ... -
十步以内完成精细web打印
2017-06-21 11:44 7366注意: 康虎云报表组 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6693注意: 康虎云报表 ... -
疯狂软件对Oracle放弃Java EE的看法
2016-08-14 22:38 517来源:http://javaligang ... -
几个Java相关的思维导图
2016-03-17 13:07 954来源:http://blog.csdn.net/jackf ... -
jasperReport Applet 打印
2016-02-01 16:33 859Applet方式的原理是本地下载Applet以及Jas ... -
为Java说句公道话
2016-01-24 10:59 707为Java说句公道话 有些 ... -
Mybatis Generator配置详解(中文)_转
2015-12-17 16:44 909来自: http://www.jianshu.com/p/e ... -
一个提供大量数据模型的网站
2015-12-17 14:00 970网站地址是:http://www.databaseansw ... -
采用ajp代理模式配置Apache+tomcat实现负载均衡(转)
2015-11-13 10:22 852这一种方法,配置简单,性能也高。附AJP介绍: AJP ... -
MyBatis配置文件修改侦测及重载的实现
2015-07-31 13:53 2323MyBatis配置文件修改侦测及重载的实现: /** ... -
Spring optional @PathVariable?
2015-07-09 13:13 901Q: Is it possible to somehow ... -
The forked VM terminated without saying properly goodbye. VM crash or System.exi
2015-07-07 18:22 4268The forked VM terminated witho ...
相关推荐
2. 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 3. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 4. ...
标题中的“论坛转帖工具.rar”表明这是一个用于在论坛之间转移帖子的软件工具,通常用于帮助用户方便地将一个论坛的帖子内容复制到另一个论坛,可能是为了分享信息、讨论或保存重要的帖子。这类工具可能包括自动抓取...
Oracle分析函数是数据库查询中的一个强大工具,它们在处理数据集时提供了高级的聚合功能,可以对一组行进行计算,并返回单个值或一组值。分析函数与聚合函数(如SUM, AVG, COUNT等)类似,但有显著的区别:聚合函数...
【原创】转帖请注明来源,谢谢 -tag 1- 测试无内存泄露 1 创建数据对象() NSMutableDictionary *map = [[NSMutableDictionary alloc]init]; [map setObject:@"a" forKey:@"author"]; [map setObject:@...
它采用了先进的算法,能有效地选择并移除选定区域的水印,同时通过周围的图像内容无缝填补空白,使得修复后的图片看起来自然无痕。 使用Teorex Inpaint的步骤如下: 1. **安装与启动**:下载并安装Teorex Inpaint ...
原文转自:http://topic.csdn.net/u/20100609/08/7f5b90b1-724a-46ce-a8c7-cba778ab2e02.html 所见即所得的 打印,导出excel,复杂表头,列合并等功能,附全部源码即样例
- **内容迁移**:当需要将一个论坛的HTML帖子内容迁移到另一个只支持UBB的论坛时,Html2UBBMaxcj非常有用。 4. **压缩包内的文件**: - **Readme.txt**:通常包含软件的使用说明、注意事项或者开发者信息,对于...
X2转帖工具、采集工具”是针对这个平台设计的辅助软件,主要用于帮助论坛管理员或用户批量发布帖子和采集内容,提高论坛内容更新的效率。 一、批量发帖功能 1. 自动化发布:此工具可以自动化地创建和发布帖子,...
UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe
标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...
"一键转帖功能插件 for 帝国CMS v1.0.rar" 是一个专为帝国CMS设计的扩展工具,其主要目标是简化用户在网站上分享内容的过程,提高用户体验。这个插件允许用户轻松地将网站上的文章或信息复制并转发到其他平台,如...
【标题】:“2021-2022年收藏的精品资料转帖经济学资源.doc” 【描述】:“精品教育教学资料” 这篇文档整理了2021至2022年间收集的一些高质量经济学教育资源,主要关注的是综合性的经济学研究领域。这些资料对于...
它允许用户快速地将一篇帖子从一个贴吧复制并发布到另一个贴吧,无需手动复制粘贴文字和图片。这一特性对于那些希望分享有价值信息或者在多个贴吧同步维护内容的用户来说,非常实用。转帖过程中,工具通常会自动保留...
《一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0》 本文将深入探讨“一键转帖功能插件”在帝国CMS 6.0系统中的应用与实现,该插件适用于GBK及UTF-8编码环境,旨在提升网站内容的分享与传播效率。我们将从安装...
"转帖工具插件 for PHPwind 7.5 正式版" 是专门为 PHPwind 7.5 版本设计的一个功能插件,旨在提供便捷的帖子转移功能,帮助管理员或者用户将内容从一个地方轻松移动到另一个地方,而无需直接编辑论坛的原始文件。...
H42131-转帖《关于用净值计算法计算收益》.doc
- **重要性**:良好的布局可以让幻灯片看起来更专业,便于受众阅读。 - **实践建议**: - 保持布局一致性,使整体风格统一。 - 合理利用空白区域,避免页面拥挤。 - 字体大小、颜色等应统一规划,增强视觉效果。 ...
2. **IP所在地搜索**:`交流论坛--ASP编写完整的IP所在地搜索类.htm`可能包含了一个使用ASP实现的IP地址地理位置查询的代码示例,这涉及到了网络编程和第三方API的调用。 3. **JSP内部对象**:`交流论坛--JSP内部...
例如,用户可以创建一个名为`new_anti-disabler.user.js`的文件,放入特定的代码,以恢复被禁用的右键菜单和文本选择功能。 【火狐浏览器解除限制】 对于火狐浏览器,用户可以编写或安装UserScript(如New Anti-...
一页纸,刚看没有多少内容,也就半张纸的试题,可仔细看起来题目还挺多。有指针和引用的区别与联系,哪个更安全?为什么?类和结构体有什么联系和区别,相互之间能不能继承?还考了整型,指针,引用的sizeof。纳闷了...