cnsd007
2010-08-18 16:03
浏览 232
已采纳

关于java 反射问题

[code="java"]public static Customer setCustomerObject(String[] str)
throws IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {

    Class<?> classType = new Customer().getClass();
    Field fields[] = classType.getDeclaredFields();
    Object objectCopy = classType.getConstructor(new Class[] {})
            .newInstance(new Object[] {});
    for (int i = 0; i < fields.length; i++) {
        Field field = fields[i];

        String fieldName = field.getName();
        String firstLetter = fieldName.substring(0, 1).toUpperCase();

        // 获得和属性对应的setXXX()方法的名字
        String setMethodName = "set" + firstLetter + fieldName.substring(1);

        // 获得和属性对应的getXXX()方法

        // 获得和属性对应的setXXX()方法
        Method setMethod = classType.getMethod(setMethodName,
                new Class[] { field.getType() });
        // 获得 set方法参数的类型
        Class pvec = setMethod.getParameterTypes()[0];//

color=red]这里得到了 类型,是否可以根据这个类型 将 str[i] 转换为 该类型? 将一个泛类型向下转化为具体的类型,然后调用 这个类型的方法
将str[i] 转化 比如 Long.ValueOf(str[i])[/color]

System.out.println(pvec);
setMethod.invoke(objectCopy, str[i]);
}
return (Customer) objectCopy;
}[/code]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 「已注销」 2010-08-18 16:34
    已采纳

    不用转换,我使用Method.invoke(obj,new Object[]{arg1,args2})都是这么直接用。反射机制帮你搞定,咱们不容那么麻烦!

    点赞 打赏 评论
  • 「已注销」 2010-08-18 16:16

    转换做什么?invoke函数的参数就是Object的,可以使用任何类型的,你转换了也没意义啊

    点赞 打赏 评论
  • 「已注销」 2010-08-19 08:50

    我说的那种是多参数的情况下,也是举个例子。你这个set方法肯定就一个参数,要不然你也不会用str[i]取一个参数,还有invoke(Object obj, Object... args) 的定义,参数是可变参数,你传一个Object对象或者一个Object对象数组都行。你这里的str[i]是一个String类型的对象,同时他也是一个Object啊,所以没有必要转换!

    点赞 打赏 评论
  • 「已注销」 2010-08-19 14:06

    嗯。是的。这个你放心。不管你的方法的参数是类型行,调用的时候直接传递你的参数就行了,不用做什么转换,不管你的是int,long,还是sting,只要你传给invoke的参数是一个Object就没有问题,按一些都是对象算,那么一些都是Object,所以invoke接受一些参数,并会转换,你不用担心类型转化!

    点赞 打赏 评论

相关推荐 更多相似问题