当前位置: 代码迷 >> J2SE >> java 利用反射对一个对象全部属性赋值
  详细解决方案

java 利用反射对一个对象全部属性赋值

热度:51   发布时间:2016-04-23 20:14:40.0
java 利用反射对一个对象所有属性赋值
    public static void main(String[] args) {
        String key = "Age";
        Field field;
        try {
            Class action = Class.forName("cn.Persone");
            field = action.getDeclaredField(key);
            //field.setAccessible(true); 
            Object beo = action.newInstance();
            Object returnValue = "1";
            Class<?> type = field.getType();
            Method method = action.getDeclaredMethod("set" + key, type);

            method.invoke(beo, returnValue);
            System.out.println(beo);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

如代码所示,希望对某个对象的属性赋值,之前可以给定这个属性的名称,但是赋给这个属性的只能是String类型的,请问反射中有没有统一强转成属性对应类型。
            method.invoke(beo, returnValue);这段代码报java.lang.IllegalArgumentException: argument type mismatch异常,
改成:method.invoke(beo,type.cast(returnValue)); 后报“java.lang.ClassCastException

------解决思路----------------------
自己先处理
final Method m = methods[i];
            final String name = m.getName();
            Class returnType = m.getReturnType();
            Class[] args = m.getParameterTypes();


可看ant的org.apache.tools.ant.IntrospectionHelper
------解决思路----------------------
建议用内省来做。  不过这个属性类型的判断是不可避免的
------解决思路----------------------
若是基本数据类型或是包装类的话,也不过这么几种,if-else判断一下就可以吧
  相关解决方案