本站首页    管理页面    写新日志    退出


«December 2025»
123456
78910111213
14151617181920
21222324252627
28293031


公告

 


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:流浪狗
日志总数:44
评论数量:19
留言数量:-2
访问次数:194062
建立时间:2008年3月13日




[JAVA]toString方法实现(JAVA2核心技术学习)
软件技术

流浪狗 发表于 2008/3/28 14:03:42

package com.cool.reflect; import java.lang.reflect.*;import java.util.*;import java.text.*; public class ObjetAnalyzerTest { public static void main(String args[]) {  ArrayList<Integer> squares = new ArrayList<Integer>();  for (int i = 1; i <= 5; i++)   squares.add(i*i);  System.out.println(new ObjectAnalyzer().toString(squares)); }} class ObjectAnalyzer{ public String toString(Object obj){  if(obj==null) return "null";  if(visited.contains(obj)) return "...";  visited.add(obj);  Class c1 = obj.getClass();  if(c1==String.class)return (String)obj;  if(c1.isArray()){   //返回表示数组组件类型的 Class。   String r = c1.getComponentType() + "[]{";   for(int i=0;i<Array.getLength(obj);i++){    if(i>0) r+=",";    Object val= Array.get(obj, i);    if(c1.getComponentType().isPrimitive()) r +=val;    else r += toString(val);   }    return r+"}";  }    String r = c1.getName();  do{   r += "[";   //返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。   Field[] fields = c1.getDeclaredFields();   //使用单一安全性检查(为了提高效率)为一组对象设置 accessible 标志的便捷方法。   AccessibleObject.setAccessible(fields, true);      for(Field f: fields){    // 如果参数包括 static 修饰符,则返回 true,否则返回 false。    if(!Modifier.isStatic(f.getModifiers())){     if(!r.endsWith("[")) r +=",";     r +=f.getName() + "=";     try{      //返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型      Class t = f.getType();      //返回指定对象上此 Field 表示的字段的值。      Object val = f.get(obj);            //判定指定的 Class 对象是否表示一个基本类型      if(t.isPrimitive()) r +=val;      //递归      else r +=toString(val);     }catch(Exception e){      e.printStackTrace();     }         }   }   r +="]";   c1=c1.getSuperclass();  }while(c1!=null);    return r; } private ArrayList<Object> visited = new ArrayList<Object>();} 输出结果:java.util.ArrayList[elementData=class java.lang.Object[]{java.lang.Integer[value=1][][],java.lang.Integer[value=4][][],java.lang.Integer[value=9][][],java.lang.Integer[value=16][][],java.lang.Integer[value=25][][],null,null,null,null,null},size=5][modCount=5][][]


阅读全文(1705) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.414 second(s), page refreshed 144801250 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号