为了账号安全,请及时绑定邮箱和手机立即绑定

java反射如何调用参数为int的方法?

java反射如何调用参数为int的方法?

慕少森 2019-03-13 18:15:27
代码如下,会发生java.lang.NoSuchMethodException异常。import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;class MyClass{    public int intField;    public String strField;    public MyClass(){            }    public int getIntField() {        return intField;    }    public void setIntField(int intField) {        this.intField = intField;    }    public String getStrField() {        return strField;    }    public void setStrField(String strField) {        this.strField = strField;    }    @Override    public String toString() {        return intField + "  " + strField;    }    }public class TestReflection {    public static void main(String[] args) {        Class cls = null;        try {            cls = Class.forName("MyClass");                    } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        Object obj = null;        try {            obj = cls.newInstance();        } catch (InstantiationException | IllegalAccessException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        Field fs[] = cls.getFields();//获取所有public的属性        Map<String, Object> map = new HashMap<>();        map.put("intField", 10);        map.put("strField", "memeda");        for(Field f:fs){            String fieldName = f.getName();//得到该属性名            Object fieldValue = map.get(fieldName);//得到属性值                        String methodName = "set"+ fieldName.substring(0, 1).toUpperCase() +                     fieldName.substring(1);            System.out.println(methodName);
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

对于原始类型,使用反射需注意:

原始类型对应的虚拟机中的class实例和封装类对应的class实例是不相同的。

如:
int 对应的class实例为 int.class 或者 Integer.TYPE,但是 Integer 对应的 class 实例为 Integer.class

因此,你的代码中要通过反射执行 setIntField(int)时,需要通过以下方式获取 method:

Method method= cls.getMethod("setIntField", int.class);


查看完整回答
反对 回复 2019-04-18
  • 2 回答
  • 0 关注
  • 1815 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信