如何在java中通过反射调用Bean私有(private)setter方法
我无法理解如何在我的用户 Bean 中调用私有(private) setter 方法。 我已经准备好使用 PropertyDescriptor 和多种方式,但我无法访问私有(private) 通过反射设置方法。
public class GetterAndSetter
{
public static void main(String[] args)
{
GetterAndSetter gs = new GetterAndSetter();
User user = new User();
try {
gs.callSetter(user,"name","Sanket");
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void callSetter(Object obj,String fieldName, Object value) throws IntrospectionException, InvocationTargetException, IllegalAccessException , IllegalArgumentException
{
PropertyDescriptor pd;
pd = new PropertyDescriptor(fieldName,obj.getClass());
pd.getWriteMethod().invoke(obj,value);
}
}
这段代码我只会访问字段并设置字段中的值,但我不能 直接访问Reflection的setter Field
最佳答案
这是如何调用 User
类中的私有(private)方法:
try {
User user = new User();
Method method = User.class.getDeclaredMethod("setName", String.class);
method.setAccessible(true);
method.invoke(user, "Some name");
System.out.println("user.getName() = " + user.getName());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
注意对 method.setAccessible(true);
的调用
关于java - java中如何通过反射调用setter方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54049322/