您的位置:首页 > 其它

反射系列之属性方法(调用私有方法,获得属性值)

2018-03-30 17:53 621 查看
import java.lang.reflect.Field;
import java.lang.reflect.Method;

class Preson {

private String name = "liuqiang";
private int age = 23;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

private int display(String info,int id){
System.out.println("打印信息:"+info);
return id;
}

@Override
public String toString() {
return this.name + "-->" + this.age;
}

}

public class ReflectDemo {

public static void main(String[] args) {
test(Preson.class);
}

public static <T> void test(Class<T> cls) {
try {
Object obj = Class.forName(cls.getName()).newInstance();//1.通过类名创建新实例
Class classBean = obj.getClass(); //2.获取该新实例的类
Field[] fields = classBean.getDeclaredFields(); //3.取得该类的所有成员变量

//反射属性
for (Field field : fields) {
field.setAccessible(true);//4.取消对每个属性的安全检查(说白了,也就是允许私有变量)
System.out.println("属性类型:" + field.getType() + "\t属性名:" + field.getName() + "\t属性值:" + field.get(obj));
}
//反射方法
Method[] methods = classBean.getMethods();
for (Method m : methods) {
System.out.println(m.getName());
}
//调用私有方法 参数一:指定调用的方法名 参数二:指定方法后面的参数类型
Method displayMethod = classBean.getDeclaredMethod("display", String.class, int.class);
displayMethod.setAccessible(true);//取消对此私有的方法的安全检查
Object liuqiang = displayMethod.invoke(obj, "liuqiang", 23);//调用
System.out.println(liuqiang);

} catch (Exception e) {
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: