锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
緇撳悎涓嬮潰浠g爜鐨勭粨鏋滃彲浠ョ煡閬擄紝鍏跺疄isArray()鏄互“[]”鏉ュ垽鏂殑錛岃嚦浜庢庝箞瀹炵幇錛屽皬寮熻兘鍔涙湁闄愩?br />
浜嬪疄涓婏紝ArrayList瀵硅薄涓湁elementData榪欎竴Object[]鍙橀噺錛屾墍浠ワ紝鍦ㄤ唬鐮佺殑絎竴嬈¢掑綊鍓嶏紝鍒╃敤鍙嶈韓鏈哄埗鑾峰緱浜嗚繖涓Field騫惰繘鍏oString閫掑綊錛屽茍閫氳繃浜唅sArray()鐨勬楠屻?br />
鍙﹀錛氱敱鎵撳嵃鍑烘潵鐨勬秷鎭彲浠ョ煡閬擄紝濡傛灉灝嗕袱涓猺eturn鍒嗘垚涓ら儴鍒嗭紝鍒欙紝鍓嶉潰鐨勫彧璋冪敤榪?嬈★紝鍚庨潰鐨勮皟鐢ㄤ簡5嬈★紝閭f槸鍥犱負鏁扮粍Object[] elementData鍦ㄦ帴鏀朵簡鍘熷瀷鏁版嵁int鍚庝細灝唅nt鑷姩灝佽鎴恓ava.lang.Integer瀵硅薄錛屾墍浠etComponent()鑾峰緱鐨勬槸Integer綾誨瀷錛岃岄潪鍘熷瀷int錛屽洜姝ら掑綊璋冪敤toString()銆?br />
絎竴嬈″啓BLOG錛屽搱鍝堬紝椹┈铏庤檸錛岃瑙佽皡
浠ヤ笅鏄竴孌礐ore Java閲岀殑涓涓緥瀛愶紝鍔犱笂鎴戣嚜宸辯殑璋冭瘯璇彞錛?br />
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
public class ObjectAnalyzerTest {
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 cl=obj.getClass();
if(cl==String.class)return (String)obj;
if(cl.isArray()){
// System.out.println(cl.getName()+"+"+"1+"+re++);
String r = cl.getComponentType()+"[]{";
for (int i = 0;i < Array.getLength(obj);i++){
if (i>0)r+=",";
Object val = Array.get(obj,i);
if (cl.getComponentType().isPrimitive()) r+=val;
else r += toString(val);
}
System.out.println("X+"+r);
return r+"}";
}
String r = cl.getName();
// System.out.println(cl.getName()+"+"+"0+"+re++);
do
{
r+="[";
Field[] fields=cl.getDeclaredFields();
AccessibleObject.setAccessible(fields,true);
for(Field f:fields){
if(!Modifier.isStatic(f.getModifiers())){
if(!r.endsWith("["))r+=",";
r+= f.getName()+"=";
try{
Class t = f.getType();
Object val = f.get(obj);
if(t.isPrimitive()) r+=val;
else r+=toString(val);
}catch(Exception e){
e.printStackTrace();
}
}
}
r+="]";
cl=cl.getSuperclass();
}
while(cl!=null);
System.out.println("X+"+r);
return r;
}
private ArrayList<Object> visited=new ArrayList<Object>();
private int re=0;
}