在Java中调用私有方法时除了在调用之前需要设置setAccessible(true)之前,还需要注意getMethod和getDeclaredMethod
调用实例:
package com.jason.test;
//测试类
class MyTest {
private void testCall() {
System.out.println("test");
}
}
TestReflect.java
package com.jason.test;
import java.lang.reflect.Method;
public class TestReflect {
public static void main(String[] args) {
try {
Class<?> classInstance = Class.forName("com.jason.test.MyTest");
// Method method = classInstance.getMethod("testCall");
Method method = classInstance.getDeclaredMethod("testCall");
method.setAccessible(true);
method.invoke(classInstance.newInstance());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在调用私有方法时 必须用getDeclaredMethod,getDeclaredMethod和getMethod区别如下:
getMethod:Returns a object that reflects the specified public member method of the class or interface represented by this object.(只能获取public的方法)
getDeclaredMethod:Returns a object that reflects the specified declared method of the class or interface represented by this object. (能获取类中所有方法)