A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱成 中级黑马   /  2012-9-16 23:37  /  1115 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邱成 于 2012-9-17 07:08 编辑

package com.cn.demo.classdemo05;
import java.lang.reflect.Method;

public class InvokeMethodDemo04 {
    public static void main(String[] args) throws Exception {
        Class<?> c = Class.forName("com.cn.demo.classdemo05.Person");
        Object o = c.newInstance() ;
        set("name","MLDN") ;
        set("age",30) ;   // 这个地方有错误 ,难道反射的时候不通自动的装箱吗?
        get("name",o) ;
        get("age",o) ;
    }
    /**
     *
     * @param name 属性名称
     * @param value 属性值
     * @param obj 要操作的对象
     */
    public static void set(String name, Object value, Object obj)
            throws Exception {
        Method met = obj.getClass().getMethod("set" + initStr(name),
                value.getClass());
        met.invoke(obj, value); // 调用方法
    }
    public static void get(String name, Object obj) throws Exception {
        Method met = obj.getClass().getMethod("get" + initStr(name));
        Object value = met.invoke(obj);
        System.out.println(value);
    }
    public static String initStr(String name) {
        StringBuffer buf = new StringBuffer();
        buf.append(name.substring(0, 1).toUpperCase())
                .append(name.substring(1));
        return buf.toString();
    }
}
我传int类型的时候给我报错.
ReflectDemo.invokDemo.Person.setAge(java.lang.Integer)
难道反射的时候int不能自动装箱成Integer吗.

2 个回复

倒序浏览
麻烦先看确认一下你用的的jdk版本
回复 使用道具 举报
  set("age",30) ;   // 这个地方有错误 ,难道反射的时候不通自动的装箱吗?
解释:这里不能进行自动装箱,因为Integer i=30和int i=30这是两个不同的对象,有歧义的地方不能进行自动装箱,再者括号里面的数据是作为参数传递给方法的,不能进行自动装箱!基本数据类型不属于Object类型!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马