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

代码如下,会发生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);



慕少森
浏览 1818回答 2
2回答

SMILET

对于原始类型,使用反射需注意:原始类型对应的虚拟机中的class实例和封装类对应的class实例是不相同的。如:int&nbsp;对应的class实例为&nbsp;int.class&nbsp;或者&nbsp;Integer.TYPE,但是 Integer 对应的 class 实例为&nbsp;Integer.class因此,你的代码中要通过反射执行 setIntField(int)时,需要通过以下方式获取 method:Method&nbsp;method=&nbsp;cls.getMethod("setIntField",&nbsp;int.class);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python