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>();
}
做了标记的那句话是什么意思呀
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>();
}
做了标记的那句话是什么意思呀
在JDK1.5中,新增加了“泛型”的概念,楼主可自行搜索相关内容。ArrayList<Object>的意思可以加强ArrayList的类型检查。
比如:ArrayList<String>,表示一个ArrayList中只能存在String类型的元素。
if(visited.contains(obj))
return "...";
visited.add(obj);
什么时候visited.contains(obj)才为真
visited.add(obj)这个在整个程序里面起什么作用