假设有如下类:
package com.test.reflect;
public class Person
{
private int age;
private String name;
public Persion()
{
}
public Persion(String name)
{
this.name = name;
}
public Persion(String name,int age)
{
this(name);
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
@hide
public void setAll(String name,int age)
{
setName(name);
setAge(age);
}
private int getAge()
{
return age;
}
public String getName()
{
return name;
}
}
因为getAge()和setAll()是private方法和@hide注解,平常对象无法进行调用.为了是能使用这两个方法,可通过反射:
public class ReflectDemo
{
public static void main(String[] args) throws Exception
{
//获取类引用
Class class = Class.forName("com.test.reflect.Persion");
//实例化Person对象
// Persion persion = (Persion)class.newInstance();//Persion无参构造函数
Persion persion = (Persion)class.newInstance("xiaoming",20);
//获取setAll函数
Method setAll = class.getMethod("setAll",String.class,int.class);
//调用setAll函数
setAll.invoke(persion,"xiaohong",18);
//获取getAge函数
Method getAge = class.getMethod("getAge");
//调用getAge函数
int age = (int)getAge.invoke(persion);
System.out.println("name:"+persion.getName()+" age:"+age);
}
}