Cóż, starałem się zrozumieć i przeczytać, co może spowodować to, ale ja po prostu nie można dostać go:Co może spowodować wyjątek java.lang.reflect.InvocationTargetException?
mam gdzieś w moim kodu to:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
Chodzi o to, że kiedy go próbuje wywołać metodę, którą wyrzuca zamiast jakiegoś innego oczekiwanego wyjątku (konkretnie InvocationTargetException
) (w szczególności ArrayIndexOutOfBoundsException
). Ponieważ tak naprawdę wiem, jaka metoda jest wywoływana, poszedłem od razu do tego kodu metody i dodałem blok try-catch dla linii, która ma wyrzucać ArrayIndexOutOfBoundsException
i tak naprawdę rzuciłem ArrayIndexOutOfBoundsException
zgodnie z oczekiwaniami. Jednak po przejściu w górę jakoś zmienia się na InvocationTargetException
iw kodzie powyżej catch(Exception e)
e jest InvocationTargetException
, a nie ArrayIndexOutOfBoundsException
zgodnie z oczekiwaniami.
Co może spowodować takie zachowanie lub jak mogę to sprawdzić?
Dzięki, ale jak będę się różnić między (AssertionError e) i (Exception e) na przykład? Czy zawsze otrzymuję wyjątek InvocationTargetException przed rozpakowaniem przyczyny, w której będę się różnić między poszczególnymi wyjątkami? – user550413
@ user550413: Przez rozpakowanie wyjątku i zbadanie go, oczywiście. Zawsze możesz rzucić nim samemu i złapać w ten sposób, jeśli musisz. –
Dla każdego, kto zastanawia się, co to znaczy "odwijać przyczynę w ramach' InvocationTargetException' ", odkryłem, że jeśli wydrukowałeś go za pomocą' exception.printStackTrace() ', po prostu spójrz na" Powodowany przez: " sekcja zamiast sekcji górnej/normalnej. – Jan