Java 使用反射实例化受保护构造函数时出现NoSuchMethodException
这是我第一次使用反射,不知道在实例化受保护的构造函数时犯了什么错误。下面是我实例化的构造函数的代码 getDeclaredConstructor导致NoSuchMethodException,尽管此异常类使用一个、两个和三个参数保护构造函数Java 使用反射实例化受保护构造函数时出现NoSuchMethodException,java,reflection,constructor,protected,Java,Reflection,Constructor,Protected,这是我第一次使用反射,不知道在实例化受保护的构造函数时犯了什么错误。下面是我实例化的构造函数的代码 getDeclaredConstructor导致NoSuchMethodException,尽管此异常类使用一个、两个和三个参数保护构造函数 final Constructor<JsonProcessingException> constructor = JsonProcessingException.class .getDeclaredConstructor
final Constructor<JsonProcessingException> constructor =
JsonProcessingException.class
.getDeclaredConstructor(Object.class, Object.class);
constructor.setAccessible(true);
最终构造函数=
JsonProcessingException.class
.getDeclaredConstructor(Object.class,Object.class);
constructor.setAccessible(true);
我的假设:我已经读到我们可以使用反射实例化私有构造函数,所以我假设也可以实例化受保护的构造函数。您的方法几乎是正确的,但您正在尝试反射不存在的构造函数。例如,您必须传递正确的签名
JsonProcessingException.class
.getDeclaredConstructor(String.class, Throwable.class)
您还必须考虑构造函数的参数类型,而不仅仅是数字。没有一个构造函数将两个
对象
作为参数,但有一个构造函数将字符串
和JsonLocation
作为参数,还有一个构造函数将字符串
和可丢弃
作为参数。要访问第二个构造函数,请按如下方式编写:
final Constructor<JsonProcessingException> constructor =
JsonProcessingException.class
.getDeclaredConstructor(new Class[]{String.class, Throwable.class});
constructor.setAccessible(true);
JsonProcessingException ex = constructor.newInstance(msg, throwable);
最终构造函数=
JsonProcessingException.class
.getDeclaredConstructor(新类[]{String.Class,Throwable.Class});
constructor.setAccessible(true);
JsonProcessingException ex=constructor.newInstance(msg,throwable);
另请参见未传递Object.class获取具有单个参数的任何构造函数的通用方法?@Vishwanathgowdak no(除非参数类型为true和
对象
)。你必须知道参数类型。如果需要不太严格的匹配,则应遍历getDeclaredConstructors()
,以找到适合的构造函数