我有点笨
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 的行全部都可以删除。