[英]how to invoke setter method by reflection in java
how to invoke Bean private setter method by reflection in java 如何通过反射在Java中调用Bean私有setter方法
I can't Understand how to invoke private setter Method in My User Bean. 我不明白如何在“我的用户Bean”中调用私有setter方法。 I all ready used PropertyDescriptor and many way but i am not access private setter method by the Reflection.
我都准备好使用PropertyDescriptor并以多种方式使用,但是我不能通过反射访问私有的setter方法。
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);
}
}
This Code I would only access the filed and set the value in filed,But I can't access the setter Field directly to the Reflection 此代码我将只访问字段并在字段中设置值,但是我无法直接将setter字段访问到Reflection
This how you can call a private method in the User
class: 这样可以在
User
类中调用私有方法:
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();
}
Note the call to method.setAccessible(true);
请注意对
method.setAccessible(true);
的调用method.setAccessible(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.