import java.lang.reflect.*;
class Dummy{
private void foo(){
System.out.println("hello foo()");
}
}
class Test{
public static void main(String[] args) throws Exception {
Dummy d = new Dummy();
Method m = Dummy.class.getDeclaredMethod("foo");
//m.invoke(d);// throws java.lang.IllegalAccessException
m.setAccessible(true);// Abracadabra
m.invoke(d);// now its OK
}
}
5条答案
按热度按时间snz8szmq1#
在Method对象上使用
setAccessible(true)
,然后再使用它的invoke
方法。如果有人对调用带参数的方法感兴趣,请参阅How do I invoke a Java method when given the method name as a string?,具体回答如下:https://stackoverflow.com/a/30671481。
只是不要忘记在调用
private
方法时添加setAccessible(true)
。oyt4ldly2#
首先,你需要得到类,这是非常直接的,然后使用
getDeclaredMethod
通过名称获得方法,然后你需要将方法设置为Method
对象上的setAccessible
方法可访问。tag5nh1u3#
kpbwa7wx4#
如果你想把任何参数传递给私有函数,你可以把它作为第二个,第三个.....调用函数的参数。下面是示例代码。
完整的例子可以看到Here
bn31dyow5#
使用java反射访问私有方法(带参数)的示例如下: