我正在尝试访问java中reverse()中的私有方法。
我尽力使它成为可能,但最后失败了。有人能帮我解决这个问题吗?我只需要一次成功的跑步。也许我可以修改密码。也许我做错了?
错误:
Exception in thread "main" java.lang.NoSuchMethodException: Dummy.foo()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at Test.main(Dummy.java:22)
Process completed.
我的代码:
import java.util.*;
import java.lang.reflect.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Dummy{
private void foo(String name) throws Exception{
BufferedReader n = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please give name: ");
name = n.readLine();
StringBuffer o = new StringBuffer(name);
o.reverse();
System.out.print("Reversed string: "+o);
}
}
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
}
}
2条答案
按热度按时间7ajki6be1#
或者,可以使用methodhandles。你的
Test
类,重写为使用MethodHandles
. (班级Dummy
保持不变。)注意:灵感来自java | baeldung中的方法句柄
ttygqcqt2#
getDeclaredMethod
需要您传递参数类型,以便它可以解析重载方法。自从你的
foo
方法只有一个类型为的参数String
,以下应起作用:当然,你也需要改变
invoke
调用传递字符串。