Метод вызова NativeMethodAccessorImpl объявляет, что может генерировать IllegalArgumentException
или InvocationTargetException
public Object invoke(Object obj, Object[] args)
throws IllegalArgumentException, InvocationTargetException
{
// We can't inflate methods belonging to vm-anonymous classes because
// that kind of class can't be referred to by name, hence can't be
// found from the generated bytecode.
if (++numInvocations > ReflectionFactory.inflationThreshold()
&& !ReflectUtil.isVMAnonymousClass(method.getDeclaringClass())) {
MethodAccessorImpl acc = (MethodAccessorImpl)
new MethodAccessorGenerator().
generateMethod(method.getDeclaringClass(),
method.getName(),
method.getParameterTypes(),
method.getReturnType(),
method.getExceptionTypes(),
method.getModifiers());
parent.setDelegate(acc);
}
return invoke0(method, obj, args);
}
private static native Object invoke0(Method m, Object obj, Object[] args);
Собственный метод создает исключение IllegalArgumentException в некоторыхслучаи, например
Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Но я не вижу никакой возможности бросить InvocationTargetException
проверенное исключение
Может InvocationTargetException
бытьгенерируется нативным методом invoke0
(который не объявляет исключения)?
Или InvocationTargetException
остается из-за обратной совместимости сигнатуры метода / будущей совместимости?