可变长参数传递问题解决

南楼画角 提交于 2020-11-06 04:45:32
public Builder methodSignature(String name, Class<?>... args) {

         
            Class objectClass = mTarget.getClass();
            if(objectClass == Object.class) return this;

            // build signature by object , name & args

            do {
                try {
                  // bug here
                    targetMethod = (Method) mFindMethod.invoke(objectClass, name, args);
                    return this;
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                objectClass = objectClass.getSuperclass();
            } while (mResoveParent  && objectClass != Object.class);

            return this;
        }

问题: 可边长参数 args , 作为参数传入 invoke 方法后,会作为 invoke 方法的可变长参数的第一个参数传递。

相当于传入了  Object nArgs[]

nArgs[0] = args;

解决办法:

Object vars[] = args;

 targetMethod = (Method) mFindMethod.invoke(objectClass, name, vars);

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!