java反射学习--操作私有成员 (二)

2014-11-24 10:36:25 · 作者: · 浏览: 1
Type(int n, String str, String[] arr, List list) {
this.n = n;
this.str = str;
sArr = arr;
this.list = list;
}

public String toString(){

StringBuilder sb = new StringBuilder();
sb.append("int n=").append(this.n).append(" ");
sb.append("String str=").append(this.str).append(" ");

sb.append("String[] sArr=");
for(int i=0;i sb.append(sArr[i]).append(" ");
}

sb.append("List list=");
for(int i=0;i sb.append(list.get(i)).append(" ");
}

return sb.toString();
}


}

import java.util.List;

public class DataType {

private int n;

private String str;

private String[] sArr;

private List list;


public DataType(){}

public DataType(int n, String str, String[] arr, List list) {
this.n = n;
this.str = str;
sArr = arr;
this.list = list;
}

public String toString(){

StringBuilder sb = new StringBuilder();
sb.append("int n=").append(this.n).append(" ");
sb.append("String str=").append(this.str).append(" ");

sb.append("String[] sArr=");
for(int i=0;i sb.append(sArr[i]).append(" ");
}

sb.append("List list=");
for(int i=0;i sb.append(list.get(i)).append(" ");
}

return sb.toString();
}


}
首先我们先使用不带参数的构造方法


[java]
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class MyTest {

public static void main(String[] args) throws Exception {

int n=100;

String str = "I love java";

String[] sArr = new String[]{"xiaoming","xiaohong","zhangsan"};

List list = new ArrayList();//0 1 2

for(int i=0;i<3;i++){
list.add(i);
}

Class clazz = DataType.class;

//获取默认的构造方法对象
Constructor cons = clazz.getConstructor(new Class[]{});
//运行不带参数的构造方法,创建对象实例
DataType dataType = cons.newInstance(new Object[]{});
//获取所有的字段
Field[] fields = clazz.getDeclaredFields();

//为每一个字段赋值
for(Field field : fields){
//首先设置该字段的可访问性
field.setAccessible(true);

if(field.getType().getSimpleName().equals("int")){
field.set(dataType, n);
}else if(field.getType().getSimpleName().equals("String")){
field.set(dataType, str);
}else if(field.getType().getSimpleName().equals("String[]")){
field.set(dataType, sArr);
}else if(field.getType().getSimpleName().equals("List")){
field.set(dataType, list);
}
}

//获取toString方法
Method toStringMethod = clazz.getMethod("toString", new Class[]{});

Object result = toStringMethod.invoke(dataType, new Object[]{});

System.out.println(result);



}
}

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class MyTest {