繁体   English   中英

如何通过反射在Java中调用setter方法

[英]how to invoke setter method by reflection in java

如何通过反射在Java中调用Bean私有setter方法

我不明白如何在“我的用户Bean”中调用私有setter方法。 我都准备好使用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);
     }

 }

此代码我将只访问字段并在字段中设置值,但是我无法直接将setter字段访问到Reflection

这样可以在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();
}

请注意对method.setAccessible(true);的调用method.setAccessible(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM