在使用 `Method.invoke()` 进行反射调用时,如果出现 `java.lang.IllegalArgumentException: argument type mismatch` 异常,通常是因为传入的参数类型与目标方法声明的参数类型不匹配。 以下是一个优雅处理该异常的示例: ```java import java.lang.reflect.Method; public class ReflectiveInvoke { public static void main(String[] args) { try { // 创建实例 MyClass obj = new MyClass(); // 获取方法 Method method = MyClass.class.getMethod("setValue", int.class); // 错误的参数类型(传入 String 但期望 int) Object[] argsArray = new Object[] { "123" }; // 反射调用 method.invoke(obj, argsArray); } catch (IllegalArgumentException e) { System.err.println("反射调用参数不匹配: " + e.getMessage()); // 可以记录日志、转换参数类型、或者提示用户 } catch (Exception e) { e.printStackTrace(); } } static class MyClass { public void setValue(int value) { System.out.println("Value set to: " + value); } } } ``` 处理建议 1. 在调用前检查参数类型是否匹配,可以使用 `Class.isAssignableFrom()` 或 `Object.getClass()` 进行判断。 2. 对参数进行自动类型转换(如将字符串转为数字)以适应目标方法的参数类型。 3. 使用包装类或基本类型时要特别注意,例如 `Integer` 与 `int` 在反射中是不同的类型。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: - 参数类型是基本类型时,反射调用传入 `null` 会导致 `IllegalArgumentException`。 - 自动装箱/拆箱在反射中不会自动处理,必须显式匹配类型。 - 方法重载的情况下,必须精确匹配参数类型,否则可能调用到错误的方法或抛出异常。 [2025-08-12 15:59:19 | AI写代码神器 | 426点数解答]