日期:2014-05-20  浏览次数:20787 次

我有点笨
import   java.util.*;
import   java.text.*;
import   java.lang.reflect.*;

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   c=obj.getClass();
if(c==String.class)  
return   (String)obj;
if(c.isArray())
{
String   r=c.getComponentType()+ "[]{ ";
for(int   i=0;i <Array.getLength(obj);i++)
{
if(i> 0)   r+= ", ";
Object   val=Array.get(obj,   i);
if(c.getComponentType().isPrimitive())   r+=val;
else   r+=toString(val);
}
return   r+= "} ";
}
String   r=c.getName();
do
{
  r+= "[ ";
Field[]   fields=c.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)
{}


}
}
r+= "] ";
c=c.getSuperclass();
}
while(c!=null);
return   r;
}
private   ArrayList <Object>   visited=new   ArrayList <Object> ();
}


做了标记的那句话是什么意思呀

------解决方案--------------------
就是说ArrayList visited中是否包含obj
------解决方案--------------------
你是不是要问这个:ArrayList <Object>

解释:
在JDK1.5中,新增加了“泛型”的概念,楼主可自行搜索相关内容。

ArrayList <Object> 的意思可以加强ArrayList的类型检查。
比如:ArrayList <String> ,表示一个ArrayList中只能存在String类型的元素。

------解决方案--------------------
visited 在这个程序中就是垃圾代码,一点用处都没有,在ObjectAnalyzer只出现过三次:声明、测试、添加。而添加好后就什么都不做了。如果你没有把代码弄错的话,所有有关 visited 的行全部都可以删除。