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>();
}
做了标记的那句话是什么意思呀

解决方案 »

  1.   

    忘了说了,这是书上的一个例子,说是写个通用的toString()
      

  2.   

    就是说ArrayList visited中是否包含obj
      

  3.   

    能不能再说清楚点,这个加到ArrayList里面起什么作用呀
      

  4.   

    你是不是要问这个:ArrayList<Object>解释:
    在JDK1.5中,新增加了“泛型”的概念,楼主可自行搜索相关内容。ArrayList<Object>的意思可以加强ArrayList的类型检查。
    比如:ArrayList<String>,表示一个ArrayList中只能存在String类型的元素。
      

  5.   

    不是问这个,是这个程序里面
    if(visited.contains(obj))
    return "...";
    visited.add(obj);
    什么时候visited.contains(obj)才为真
    visited.add(obj)这个在整个程序里面起什么作用
      

  6.   

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

  7.   

    如果 visited 是静态成员的话,那这些代码还是有点用处的,但它好像不是。