gpt4 book ai didi

java - 无法使用反射包将变量传递给私有(private)方法

转载 作者:行者123 更新时间:2023-11-29 07:06:49 25 4
gpt4 key购买 nike

我正在尝试使用反射包访问私有(private)方法。我能够访问私有(private)方法,但我在发送参数时遇到问题。

我的代码如下:

Sample s = new Sample();
java.lang.reflect.Method method [] = Sample.class.getDeclaredMethods();
System.out.println("Total Number of methods in Sample class"+method.length);
for (int i=0; i<method.length;i++) {
String methodName=method[i].getName();
System.out.println("Method Name is "+methodName);
if (methodName.equalsIgnoreCase("sampleTest1")) {
method[i].setAccessible(true);
//This is calling sampleTest1 method; it's not working
//System.out.println(method[i].invoke(s, new String[]{"ABC"});
} else {
//This is calling sampleTest method and it's working
System.out.println(method[i].invoke(s, null));
}
}

我的示例类:

public class Sample {
private String sampleTest(){
return "Private Method";
}

private String sampleTest1(String abc){
return "Private Method";
}
}

我能够访问 sampleTest() 方法,但我不知道如何将参数传递给 sampleTest1() 方法。你能帮忙吗?

输出

Total Number of methods in Sample class2

Method Name is sampleTest

Exception in thread "main" java.lang.IllegalAccessException: Class com.sarma.reflection.sample.SampleTest can not access a member of class com.sarma.reflection.sample.Sample with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Method.invoke(Method.java:588)
at com.sarma.reflection.sample.SampleTest.main(SampleTest.java:26)

最佳答案

您需要转换传递给 invoke()null 参数。

 System.out.println(method[i].invoke(s, (Object)null));

否则它认为您正在调用不带参数的底层方法,即。一个 null Object[]。通过强制转换,编译器(和运行时)知道您正在传递一个 null 对象作为可变参数 Object[] 中的唯一元素。

编辑后:您是否删除了 setAccessible(true)?您已将 if-else 交织在一起。使用

if(methodName.equalsIgnoreCase("sampleTest1")){
method[i].setAccessible(true);
System.out.println(method[i].invoke(s, (Object) null));
} else{
method[i].setAccessible(true);
System.out.println(method[i].invoke(s, null));
}

或者将 method[i].setAccessible(true); 放在 if-else 之外

关于java - 无法使用反射包将变量传递给私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18789877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com