qq_39310773
qq_39310773
采纳率40%
2018-01-05 07:05

java 在无法创建对象的情况下如何利用反射为对象赋值?

5
  • java

我的教程里少一个工具类的方法:
public void setField(Object 对象,String 方法名,Object 参数){
//传入一个对象,方法名,形参 通过反射为对象属性赋值
}
我写的时候发现无法实例化Object就无法为属性赋值。
请帮助我完成此方法或提供功能相同的工具类,Thanks♪(・ω・)ノ

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • u013278314 懒惰的毛毛虫 3年前

    public class MapTest {

    private String name;
    
    public static void main(String[] args) throws InterruptedException, NoSuchFieldException, SecurityException,
            IllegalArgumentException, IllegalAccessException {
    
        MapTest m = new MapTest();
        m.setName("123");
        setField(m, "name", "321");
        System.out.println(m.getName());
    }
    
    public static void setField(Object o, String methodName, Object para)
            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Class<?> clazz = o.getClass();
        Field field = clazz.getDeclaredField(methodName);
        field.setAccessible(true);
        field.set(o, para);
    
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    

    }

    
    

    输出结果 321

    点赞 2 评论 复制链接分享
  • wangjin9805 wangjin9805 3年前

    Class<?> clazz=Class.forName(className);
    Object bean = clazz.newInstance();
    Field field = clazz.getDeclaredField("msg");
    field.setAccessible(true);
    field.set(bean, "hello world");

    点赞 2 评论 复制链接分享
  • vonovonov vonovonov 3年前

    Class clazz = Class.forName("com.fanshe.Person");

    点赞 2 评论 复制链接分享
  • wqk2832146458 獬麟 3年前

    三种形式来着我记得,forname是一种,这个书上都有,好好看书

    点赞 评论 复制链接分享
  • qq_35168258 qq_35168258 3年前

    我的User继承它, 但是我怎么利用反射得到User的实例对象 Object o = base....
    最佳答案在开发Web应用程序时,经常需要将Post的表单的内容传递给JavaBean。虽然一些... 我们可以利用反射实现表单的字段自动赋给JavaBean的相应setXxx方法。

    点赞 评论 复制链接分享