java语言,通过反射获得类中的字段,及对应值。
package sample.old;
import java.lang.reflect.Field;
/**
* Created by andrew on 14-7-14.
*/
public class Test {
public static void main(String[] args) {
Elem first = new Elem("this is first");
Elem second = new Elem("this is second");
for (Field f : first.getClass().getDeclaredFields()) {
if (f.getGenericType().equals(Integer.class)) {
//todo: int类型的无法用Integer来判断
v("f Integer type = ", f.getType(), ", ", f.getName());
} else if (f.getGenericType().equals(int.class)) {
v("f int type = ", f.getType(), ", ", f.getName());
} else if (f.getGenericType().equals(String.class)) {
String strVal = "";
f.setAccessible(true);//todo: 别忘了private类型的字段要设置访问权限
try {
strVal = (String) f.get(first);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
v("f str type = ", f.getGenericType(), ", ", f.getName(), " =", strVal);
}
}
try {
Field secondField = second.getClass().getDeclaredField("mystr");
if (secondField.getGenericType().equals(String.class)) {
secondField.setAccessible(true); //todo: 别忘了private类型的字段要设置访问权限
String val = (String)secondField.get(second);
v("test getDeclaredField ", val);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void v(Object... array) {
StringBuffer buf = new StringBuffer();
for (Object s : array) {
buf.append(s).append(" ");
}
buf.append("\n");
System.out.print(buf.toString());
}
}
执行结果
f int type = int , myint
f str type = class java.lang.String , mystr = this is first
test getDeclaredField this is second