2009-08-24 8 views
2

ist eine Fortsetzung des Pfostens How does one access a method from an external jar at runtime?Wie greift man zur Laufzeit auf eine Methode von einem externen jar (part2) zu? Diese

McDowell mit dem Code reagiert:

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); 
    } 
} 

I die folgende Methode hinzugefügt:

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

und modifizierte Haupt diese beiden Zeilen umfassen:

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

Anstatt jedoch sehen

test1
test2

ich die folgende Ausnahme erhalten:

Exception in thread "main" java.lang.IllegalArgumentException: falsche Anzahl von Argumenten

Ich habe Nachdem ich die Sun Java Tutorials durchgegangen bin, habe ich den Argumenten vor dem Aufruf ein eigenes Objekt gegeben und die Arrays neu geladen, alles ohne Erfolg. Kann mir jemand erklären, was ich hier falsch mache?

Danke, Todd

Antwort

3

Das sind die Probleme mit varargs!

+0

Ja, beachten Sie, dass das Aufrufen von (Object, Object ...) bedeutet, dass der zweite Parameter technisch ein Object [] sein sollte, also müssen alle übergebenen Argumente übergeben werden, wie oben gezeigt . Jawohl. :-D –

+0

@tackline, @ brent, danke. Ich bin viel leichter in der Haarabteilung. Kleber, ich brauche Kleber !! – Todd

Verwandte Themen