[英]Invoking by reflection a private static method
當我在私有靜態方法上調用 java.lang.reflect.Method.invoke() 方法時,我得到一個“java.lang.IllegalArgumentException:參數數量錯誤”。 我想我尊重 javadoc 規范,我做錯了什么嗎? 謝謝你的幫助。
這是我的代碼:
public class MyClass {
....
private static Object myMethod(String[] stringArray) {...}
}
我想在 JUnit 測試類中測試 myMethod():
public class MyClassTest {
private static String[] myArray = {"A", "B", "C"};
@Test
public void myMethodTest() {
Method method = Class.forName("mypackage.MyClass").getDeclaredMethod("myMethod", myArray.getClass());
method.setAccessible(true);
method.invoke(null, myArray);
}
}
由於invoke()
將 vararg 作為參數,Java 編譯器將您傳遞的數組的每個元素視為 vararg 參數,即它認為它等效於
method.invoke(null, "A", "B", "C");
您可以將數組強制轉換為對象來解決問題:
method.invoke(null, (Object) myArray);
您需要將String
包裝在一個對象數組中:
Method method = Class.forName("mypackage.MyClass")
.getDeclaredMethod("myMethod", myArray.getClass());
method.setAccessible(true);
method.invoke(null, new Object[] {myArray});
method.invoke()
的第二個參數需要方法參數的數組或可變參數。 對於你的方法,你只有一個參數(它也恰好是一個數組),但你仍然需要將它包裝在一個數組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.