Java反射 - 如何调用getter/setter方法?

roe*_*gol 4 java reflection

我正在尝试调用我的对象中的某些属性的set方法,我的代码是这样的:

    String[] fieldsStringName = (((CacheObject)currentObject).getFieldsToString(false)).split(", ");
    String methodName = "";

    for (int i = 0; i < objectInputArr.length; i++) {
        methodName = "set" + fieldsStringName[i];

        Method methodSetProperty = currentObject.getClass().getMethod(methodName);   <<----error occurs here
        methodSetProperty.invoke(currentObject, objectInputArr[i]);
    }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Exception in thread "main" java.lang.NoSuchMethodException: model.Book.setPagesAmount()
    at java.lang.Class.getMethod(Unknown Source)
    at CahceSystem.createNewObject(CahceSystem.java:84)
    at CahceSystem.main(CahceSystem.java:50)
Run Code Online (Sandbox Code Playgroud)

请求的setter方法很好地写在类中,也在它的超类中(仅继承了propeties),我所有的setter方法都是这样的:

public void setPagesAmount(int pagesAmount) {
    this.pagesAmount = pagesAmount;
}
Run Code Online (Sandbox Code Playgroud)

有什么建议如何解决这个问题?

aio*_*obe 5

currentObject.getClass().getMethod(methodName);
Run Code Online (Sandbox Code Playgroud)

由于方法可以重载,因此仅仅方法的名称不足以查找方法.您还需要提供参数的类型(并且setter通常不是无参数方法).

尝试类似的东西

currentObject.getClass().getMethod(methodName, objectInputArr[i].getClass());
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)