有些地方不懂,一个个问;import java.lang.reflect.*;
import java.util.*;
import java.text.*;public class ObjectAnalyzerTest{
public static void main(String args[]){
ArrayList<Integer> s = new ArrayList<Integer>();
for(int i=1;i<=5;i++){
s.add(i*i);
}
System.out.println(new ObjectAnalyzer().toString(s));
}
}class ObjectAnalyzer{
private ArrayList<Object> v = new ArrayList<Object>();
public String toString(Object obj){
if(obj == null){
return "null";
}
if(v.contains(obj)){
return "...";
}
v.add(obj); //(2)这段代码起什么作用啊?
Class cl = obj.getClass();
if(cl == String.class){
return (String)obj;
}
if(cl.isArray()){ //(1)判断当前Class对象表示的是不是一个数组,请问这句在什么时候为真啊?
//ArrayList<Integer> s = new ArrayList<Integer>();s.getClass().isArray()这个为false啊?
//System.out.println("I'm array!");
String r = cl.getComponentType()+"[]{";
for(int i=0;i<Array.getLength(obj);i++){
if(i>0){
r += ",";
}
Object val = Array.get(obj,i);
if(cl.getComponentType().isPrimitive()){
r += val;
}else{
r += toString(val);
}
}
return r+"}";
}
String r = cl.getName();
do{
r += "[";
Field fields[] = cl.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 o = f.get(obj);
if(t.isPrimitive()){
r += o;
}else{
r += toString(o);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
r += "]";
cl = cl.getSuperclass();
}while(cl != null);
return r;
}
}
import java.util.*;
import java.text.*;public class ObjectAnalyzerTest{
public static void main(String args[]){
ArrayList<Integer> s = new ArrayList<Integer>();
for(int i=1;i<=5;i++){
s.add(i*i);
}
System.out.println(new ObjectAnalyzer().toString(s));
}
}class ObjectAnalyzer{
private ArrayList<Object> v = new ArrayList<Object>();
public String toString(Object obj){
if(obj == null){
return "null";
}
if(v.contains(obj)){
return "...";
}
v.add(obj); //(2)这段代码起什么作用啊?
Class cl = obj.getClass();
if(cl == String.class){
return (String)obj;
}
if(cl.isArray()){ //(1)判断当前Class对象表示的是不是一个数组,请问这句在什么时候为真啊?
//ArrayList<Integer> s = new ArrayList<Integer>();s.getClass().isArray()这个为false啊?
//System.out.println("I'm array!");
String r = cl.getComponentType()+"[]{";
for(int i=0;i<Array.getLength(obj);i++){
if(i>0){
r += ",";
}
Object val = Array.get(obj,i);
if(cl.getComponentType().isPrimitive()){
r += val;
}else{
r += toString(val);
}
}
return r+"}";
}
String r = cl.getName();
do{
r += "[";
Field fields[] = cl.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 o = f.get(obj);
if(t.isPrimitive()){
r += o;
}else{
r += toString(o);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
r += "]";
cl = cl.getSuperclass();
}while(cl != null);
return r;
}
}
boolean b = s.getClass().isArray();
System.out.println(b);// true