public String toString(Object obj)
{
if(obj == null)
return "null";
if(visted.contains(obj))
return "...";
visted.add(obj);
Class c = obj.getClass();
if(c == String.class)
return (String)obj;
if(c.isArray())
{
String arr = c.getComponentType() + "[]{";
for (int i = 0; i < Array.getLength(obj); i++)
{
if(i > 0)
arr += ",";
Object val = Array.get(obj , i);
if(c.getComponentType().isPrimitive())
arr += val;
else
arr += toString(val);
}
return arr + "}";
}
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 += ",";
try
{
Class<?> c1 = f.getType();
Object val = f.get(obj);
if(c1.isPrimitive())
r += val;
//这是怎么执行的 debug看 继续for循环 为什么没重新进toString方法
else
r += toString(val);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
r += "]";
c = c.getSuperclass();
}
while (c != null);
return r;
}
private ArrayList<Object> visted = new ArrayList<Object>();
{
if(obj == null)
return "null";
if(visted.contains(obj))
return "...";
visted.add(obj);
Class c = obj.getClass();
if(c == String.class)
return (String)obj;
if(c.isArray())
{
String arr = c.getComponentType() + "[]{";
for (int i = 0; i < Array.getLength(obj); i++)
{
if(i > 0)
arr += ",";
Object val = Array.get(obj , i);
if(c.getComponentType().isPrimitive())
arr += val;
else
arr += toString(val);
}
return arr + "}";
}
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 += ",";
try
{
Class<?> c1 = f.getType();
Object val = f.get(obj);
if(c1.isPrimitive())
r += val;
//这是怎么执行的 debug看 继续for循环 为什么没重新进toString方法
else
r += toString(val);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
r += "]";
c = c.getSuperclass();
}
while (c != null);
return r;
}
private ArrayList<Object> visted = new ArrayList<Object>();
只有在else的情况下才会进toString(Obj)方法
可能这样写就好了
for (int i = 0; i < Array.getLength(obj); i++)
{
if(i > 0)
arr += ",";
Object val = Array.get(obj , i);
if(c.getComponentType().isPrimitive()){
arr += val;
}else{
arr += toString(val);
}
}
ArrayList<Integer> squares = new ArrayList<Integer>();
for (int i = 1; i <= 5; i++)
{
squares.add(i * i);
}
System.out.println(new ObjectAnalyzer().toString(squares));
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
public class Test{
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 Test().toString(squares));
}
public String toString(Object obj)
{
if(obj == null)
return "null";
if(visted.contains(obj))
return "...";
visted.add(obj);
Class c = obj.getClass();
if(c == String.class)
return (String)obj;
if(c.isArray())
{
String arr = c.getComponentType() + "[]{";
for (int i = 0; i < Array.getLength(obj); i++)
{
if(i > 0)
arr += ",";
Object val = Array.get(obj , i);
if(c.getComponentType().isPrimitive()){
arr += val;
}else{
arr += toString(val);
}
}
return arr + "}";
}
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 += ",";
try
{
Class<?> c1 = f.getType();
Object val = f.get(obj);
if(c1.isPrimitive())
r += val;
//这是怎么执行的 debug看 继续for循环 为什么没重新进toString方法
else
r += toString(val);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
r += "]";
c = c.getSuperclass();
}
while (c != null);
return r;
}
private ArrayList<Object> visted = new ArrayList<Object>();
}
我这样是可以进else 然后进我在toString(Obj)的断点的 可以debug 楼主看有什么区别 吗