Java.lang.reflect.InvocationTargetException является оберткой для исключения, которое было вызвано вызванным методом. Если вызванный метод в свою очередь вызывает другой метод, и этот второй метод вызывает исключение, это исключение будет «завернуто» в InvocationTargetException.
Разработка на Java — востребованное направление, такие специалисты будут нужны на рынке еще долго. На курсе «Java-разработчик» от Skypro освоить профессию можно с нуля за 11 месяцев, даже если вы гуманитарий и ничего не знаете об IT. Программа составлена от простого к сложному и адаптирована для новичков. Преподаватели — практикующие специалисты из крупных компаний: «Сбер», «Самокат» и других.
Пример
public class Test { public void testMethod() { throw new RuntimeException("Test"); } } public class Main { public static void main(String[] args) throws Exception { Test test = new Test(); Method method = Test.class.getMethod("testMethod"); try { method.invoke(test); } catch (InvocationTargetException e) { throw e.getCause(); } } }
В данном примере вызов method.invoke(test);
вызывает исключение RuntimeException("Test")
, которое исходит из метода testMethod()
. Это исключение затем «заворачивается» в InvocationTargetException
.
Причины и решение
InvocationTargetException является оберткой, и основное исключение, которое было вызвано в вызываемом методе, можно получить, вызвав метод getCause()
у объекта InvocationTargetException
.
В обратной стороне этого исключения содержится стек вызовов, который ведет к методу, где было вызвано исключение. Это помогает в отладке, так как позволяет быстро найти место, в котором возникло исключение.
Поэтому, когда возникает InvocationTargetException
, важно получить исходное исключение с помощью метода getCause()
и обработать его, вместо того чтобы просто ловить InvocationTargetException
. Это поможет выявить истинную причину проблемы.
try { method.invoke(object, args); } catch (InvocationTargetException e) { Throwable cause = e.getCause(); // обрабатываем исключение cause }
В данном примере cause
будет исключением, которое было вызвано внутри вызываемого метода. Обработка исключения cause
дает больше информации о проблеме и помогает быстрее найти и исправить ее.
В Skypro на курсе «Java-разработчик» вы научитесь писать программы для игр и приложений, освоите все нужные инструменты: Git, GitHub, Docker, Swagger, PostgreSQL и другие. Потренируетесь под руководством опытных наставников и соберете сильное портфолио. На курсе действует гарантия трудоустройства: поможем вам найти работу или вернем деньги за курс.
Добавить комментарий