使用反射实例化受保护的构造函数时出现 NoSuchMethodException
NoSuchMethodException when using reflection to instantiate protected constructor
这是我第一次使用反射,不知道我在实例化受保护的构造函数时犯了什么错误。下面是我实例化 JsonProcessingException 的构造函数的代码。
getDeclaredConstructor 导致 NoSuchMethodException,尽管此异常 class 已使用一个、两个和三个参数保护构造函数。
final Constructor<JsonProcessingException> constructor =
JsonProcessingException.class
.getDeclaredConstructor(Object.class, Object.class);
constructor.setAccessible(true);
我的假设:我读到我们可以使用反射实例化私有构造函数,所以我假设也可以实例化受保护的构造函数。
您的方法几乎是正确的,但您试图反映不存在的构造函数。例如,您必须传递正确的签名
JsonProcessingException.class
.getDeclaredConstructor(String.class, Throwable.class)
您还必须考虑构造函数参数的类型,而不仅仅是数字。 JsonProcessingException 没有接受两个 Object
作为参数的构造函数,而是一个接受 String
和 JsonLocation
以及接受 String
的构造函数和 Throwable
。要访问第二个构造函数,请这样写:
final Constructor<JsonProcessingException> constructor =
JsonProcessingException.class
.getDeclaredConstructor(new Class[]{String.class, Throwable.class});
constructor.setAccessible(true);
JsonProcessingException ex = constructor.newInstance(msg, throwable);
另见 http://tutorials.jenkov.com/java-reflection/constructors.html
这是我第一次使用反射,不知道我在实例化受保护的构造函数时犯了什么错误。下面是我实例化 JsonProcessingException 的构造函数的代码。
getDeclaredConstructor 导致 NoSuchMethodException,尽管此异常 class 已使用一个、两个和三个参数保护构造函数。
final Constructor<JsonProcessingException> constructor =
JsonProcessingException.class
.getDeclaredConstructor(Object.class, Object.class);
constructor.setAccessible(true);
我的假设:我读到我们可以使用反射实例化私有构造函数,所以我假设也可以实例化受保护的构造函数。
您的方法几乎是正确的,但您试图反映不存在的构造函数。例如,您必须传递正确的签名
JsonProcessingException.class
.getDeclaredConstructor(String.class, Throwable.class)
您还必须考虑构造函数参数的类型,而不仅仅是数字。 JsonProcessingException 没有接受两个 Object
作为参数的构造函数,而是一个接受 String
和 JsonLocation
以及接受 String
的构造函数和 Throwable
。要访问第二个构造函数,请这样写:
final Constructor<JsonProcessingException> constructor =
JsonProcessingException.class
.getDeclaredConstructor(new Class[]{String.class, Throwable.class});
constructor.setAccessible(true);
JsonProcessingException ex = constructor.newInstance(msg, throwable);
另见 http://tutorials.jenkov.com/java-reflection/constructors.html