
for (int i = 0; i < fieldslength; i++) {
Field field = fields[i];
String fieldName = fieldgetName();
Systemoutprintln("name====="+fieldName);
String firstLetter = fieldNamesubstring(0, 1)toUpperCase();
// 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldNamesubstring(1);
// 获得和属性对应的getXXX()方法
Method getMethod = classTypegetMethod(getMethodName, new Class[]{});
// 调用原对象的getXXX()方法
Object value = getMethodinvoke(object, new Object[]{});
Systemoutprintln("value===="+value);
}
写了个例子,请仔细查看代码,具体过程需要你自己对照java API 再研究,
先定义了一个普通的学生类,如下:
public class Student {private int id;
private String name;
private int age;
private String[] aiHao;
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
public String[] getAiHao() {
return aiHao;
}
public void setAiHao(String[] aiHao) {
thisaiHao = aiHao;
}
}
对学生类进行反射
public class Test3 {public static void main(String[] args) {
Student s = new Student();
ssetId(1);
ssetName("张三");
ssetAge(23);
ssetAiHao(new String[] { "足球", "篮球", "上网" });
try {
// 获取所有的变量
Field[] fields = StudentclassgetDeclaredFields();
// 循环处理变量
for (Field f : fields) {
fsetAccessible(true);
Object value = fget(s); // 取变量的值
Systemoutprint("变量名称为:" + fgetName());
if (valuegetClass()isArray()) { // 判断是否是数组
Object[] arr = (Object[]) value; // 装换成数组
Systemoutprintln(",变量值等于:" + ArraystoString(arr));
// 这里还可以做额外处理,判断数组的类型 如下面注释的代码
/
for (Object a : arr) {
Systemoutprintln("参数类型" + agetClass()getName());
// 同样运用反射的机制做额外处理
}
/
} else {
// 非数组类型,普通处理
Systemoutprintln(",变量值等于:" + value);
}
fsetAccessible(false);
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
以上就是关于如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法全部的内容,包括:如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法、java如何利用反射机制得到一个类中为数组类型的成员变量的值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)