2009-08-24 41 views
2

這是交How does one access a method from an external jar at runtime?如何在運行時從外部jar訪問方法(part2)?

道爾迴應代碼的延續:

public class ReflectionDemo { 

public void print(String str, int value) { 
    System.out.println(str); 
    System.out.println(value); 
} 

public static int getNumber() { return 42; } 

public static void main(String[] args) throws Exception { 
    Class<?> clazz = ReflectionDemo.class; 
    // static call 
    Method getNumber = clazz.getMethod("getNumber"); 
    int i = (Integer) getNumber.invoke(null /* static */); 
    // instance call 
    Constructor<?> ctor = clazz.getConstructor(); 
    Object instance = ctor.newInstance(); 
    Method print = clazz.getMethod("print", String.class, Integer.TYPE); 
    print.invoke(instance, "Hello, World!", i); 
    } 
} 

添加以下方法:

public void print2(String[] strs){ 
    for(final String string : strs){ 
     System.out.println(string); 
    } 
} 

和改性主要包括以下兩行:

Method print2 = clazz.getDeclaredMethod("print2", new Class[]{String[].class}); 
print2.invoke(instance, new String[]{"test1", "test2"}); 

然而,也看不到

test1的
test2的

我得到以下異常:線程 「主」 java.lang.IllegalArgumentException異常

異常:錯誤的參數數目

我有通過Sun Java教程,我已經在調用之前給出了他們自己的對象的參數,並且我已經重新加載了這些數組,但都沒有成功。任何人都可以解釋我在這裏做錯了嗎?

感謝, 託德

回答

3

這些都是可變參數的問題!

print2.invoke(instance, new Object[] { new String[] {"test1", "test2"}}); 
+0

是啊,調用通知發生在(對象,對象...),這意味着第二個參數應該在技術上是一個Object [],因此,所有你傳遞的參數必須通過如上圖所示。呸。 :-D – 2009-08-24 20:42:32

+0

@tackline,@brent,謝謝。在這方面,我在頭髮部門輕得多。膠水,我需要膠水! – Todd 2009-08-24 21:34:50

相關問題