package com.xin.test;
/**
* Created by r.x on 2017/7/6.
*/
public class User {
private String name;
private int age;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
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;
}
}
待反射的類
package com.xin.test;
/**
* Created by r.x on 2017/7/6.
*/
public class ReflectDemo {
public void outer(User user, String job, int time) {
System.out.println("公衆信息:" + user.getName() + "," + user.getAge() + "歲。表面從事" + job + "工作長達" + time + "年");
}
public void inner(User user, String job, int time) {
System.out.println("內部消息:" + user.getName() + "," + user.getAge() + "歲。實際從事" + job + "工作長達" + time + "年");
}
}
單元測試類
package com.xin.test;
import org.junit.Test;
import java.lang.reflect.Method;
/**
* Created by r.x on 2017/7/6.
*/
public class ReflectDemoTest {
@Test
public void testOuter() throws Exception{
Class<?> clazz = ReflectDemo.class;
Object reflectDemo = clazz.newInstance();
// 通過getMethod獲取public方法
// **注意:int.class不能寫成Integer.class,否則會報NoSuchMethodException**
Method outer = clazz.getMethod("outer", User.class, String.class, int.class);
User user = new User() {
{
setName("老王");
setAge(38);
}
};
outer.invoke(reflectDemo, user, "程序猿", 5);
}
@Test
public void testInner() throws Exception {
Class<?> clazz = Class.forName("com.xin.test.ReflectDemo");
Object reflectDemo = clazz.newInstance();
// 通過getDeclaredMethod獲取
Method inner = clazz.getDeclaredMethod("inner", User.class, String.class, int.class);
// 必須設置爲true,否則會拋出NoSuchMethodException
inner.setAccessible(true);
User user = new User() {
{
setName("老王");
setAge(38);
}
};
inner.invoke(reflectDemo, user, "單身狗", 25);
}
}