AsyncTask.class中doInBackground方法的方法签名如下所示:
protected Boolean doInBackground(MyObject... params);
在反射测试中,它看起来像这样:
try {
Method doInBackgroundMethod = asyncTaskInstance.getClass().getDeclaredMethod("doInBackground", MyObject[].class);
doInBackgroundMethod.setAccessible(true);
boolean success = (boolean) doInBackgroundMethod.invoke(asyncTaskInstance, myObjectInstance);
Assert.assertTrue(success);
} catch ...
但是我收到以下错误:
java.lang.IllegalArgumentException: argument type mismatch, on line "doInBackgroundMethod.invoke(asyncTaskInstance, myObjectInstance);"
是的,我知道有两种方法具有相同的签名,因此我正在寻找解决此问题的方法。
答案 0 :(得分:0)
而不是MyObject[].class
使用Object[].class
因为doInBackground在init期间使用类型set并在调用doInBackground时自动转换为此类型,但是当您手动执行此操作时 - 您还需要手动进行转换。