使用反射实例化受保护的构造函数

时间:2016-09-01 12:27:07

标签: java reflection constructor protected

这是我第一次使用反射,并且不知道我在实例化受保护的构造函数时所犯的错误。下面是我实例化JsonProcessingException的构造函数的代码。

getDeclaredConstructor导致NoSuchMethodException,尽管此异常类具有一个,两个和三个参数的受保护构造函数。

final Constructor<JsonProcessingException> constructor = 
    JsonProcessingException.class
        .getDeclaredConstructor(Object.class, Object.class);
constructor.setAccessible(true);

我的假设:我已经读过我们可以使用反射来实例化私有构造函数,所以我假设受保护也可以实例化。

2 个答案:

答案 0 :(得分:3)

您的方法几乎是正确的,但您正在尝试反映不存在的构造函数。您必须传递正确的签名,例如

JsonProcessingException.class
    .getDeclaredConstructor(String.class, Throwable.class)

答案 1 :(得分:3)

您还必须考虑构造函数的参数类型,而不仅仅是数字。 JsonProcessingException没有一个构造函数,它将两个Object作为参数,但是一个需要StringJsonLocation以及一个StringThrowable。要访问第二个构造函数,请按以下方式编写:

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