Тхе ИнвоцатионТаргетЕкцептион је проверени изузетак који садржи изузетак који је призвана метода или конструктор. Од ЈДК 1.4, овај изузетак је накнадно уграђен да би био у складу са механизмом ланчања изузетака опште намене. „Циљни изузетак“ који је обезбеђен у време израде и коме се приступа преко методе гетТаргетЕкцептион() сада је познат као узрок и може му се приступити преко методе Тхровабле.гетЦаусе(), као и „наслеђеног метода“.
Укратко, када позовемо класу помоћу методе Метход.инвоке(), она избацује изузетак; умотано је од јава.ланг.рефлецт.ИнвоцатионТаргетЕкцептион класа.
Узрок изузетка ИнвокатионТаргетЕкцептион
Изузетак ИнвокатионТаргетЕкцептион се углавном јавља током рада са Јава Рефлецтион АПИ и покушајте да позовете метод или конструктор у слоју рефлексије који сам избацује основни изузетак.
Слој рефлексије садржи стварни изузетак који су избациле подразумеване методе.
Како да решите јава.ланг.рефлецт.ИнвоцатионТаргетЕкцептион
ИнвоцатионТаргетЕкцептион је узрокован позваном методом, која избацује изузетак. Основни изузетак се може пронаћи помоћу методе гетЦаусе(). Стога је неопходно пронаћи стварни изузетак и решити га да би се решио ИнвоцатионТаргетЕкцептион.
Размотрите доњи пример, који намерно генерише изузетак (подели са нулом) у методи Демо(), која се позива помоћу методе Метход.инвоке(). Дакле, излаз ће избацити и АиртхметицЕкцептион (ДивидебиЗеро) и ИнвокатионТаргетЕкцептион.
ТестИнвокатионЕкцептион.јава:
import java.lang.reflect.Method; public class TestInvocationException { public static void main(String[] args) { TargetInvocation ti = new TargetInvocation(); // Accessing all the methods of TargetInvocationClass: Method[] m = TargetInvocation.class.getMethods(); try { // Invoking the first method of the TargetInvocatioClass: m[0].invoke(ti); } catch(Exception e) { // Printing the wrapper exception: System.out.println('Wrapper exception: ' + e); // Printing the 'actual' exception: System.out.println('Underlying exception: ' + e.getCause()); } } } class TargetInvocation{ public void Demo() { // Dividing by zero to intentionally throw an exception: System.out.println(10 / 0); } }
Излаз:
Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero