繁体   English   中英

使用反射实例化受保护的构造方法时,出现NoSuchMethodException

[英]NoSuchMethodException when using reflection to instantiate protected constructor

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

getDeclaredConstructor导致NoSuchMethodException,尽管此异常类使用一个,两个和三个参数保护了构造函数。

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

我的假设:我读过我们可以使用反射实例化私有构造函数,因此我假设受保护的对象也可以被实例化。

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

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

您还必须考虑构造函数的参数类型,而不仅仅是数字。 JsonProcessingException没有构造函数以两个Object作为参数,但构造函数以StringJsonLocation作为参数,而构造函数JsonLocation 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM