繁体   English   中英

Relfect构造函数的newInstance报告IllegalArgumentException异常

[英]Relfect Constructor's newInstance reports IllegalArgumentException exception

我尝试使用Reflect Constructor :: newInstance为动态生成的类生成实例。 错误和输出为:

public TTryCatch(java.lang.invoke.MethodHandle,java.lang.Throwable,java.lang.invoke.MethodHandle)
MethodHandle(List)void  class java.lang.Throwable   MethodHandle(Throwable,List)void
java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:68)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:529)
    at java.lang.invoke.CatchHandle.getCompiledInstance(CatchHandle.java:188)

我的代码是:

 Class<?> generatedClass = ....;
 try {
     Constructor constr = generatedClass.getConstructor(MethodHandle.class, Throwable.class, MethodHandle.class);
     System.out.println(constr.toString());
     System.out.println(tryTarget.toString()+"  "+exceptionClass.toString()+"   "+ catchTarget.toString());
    Object obj = constr.newInstance(tryTarget, exceptionClass, catchTarget);
    return obj;
} catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} ....

异常表明,构造函数的给定三个参数与构造函数的参数类型不匹配。 这对我来说很令人困惑,因为infor的debug(也就是输出中的println结果)表明参数应该相同。

生成的构造方法是:

  public TTryCatch(java.lang.invoke.MethodHandle, java.lang.Throwable, java.lang.invoke.MethodHandle);
    flags: ACC_PUBLIC
    Code:

给定的三个参数分别是: MethodHandlethrowableMethodHandle

任何人都可以帮助解决我的问题吗? 谢谢。

看起来构造函数的第二个参数采用了Throwable对象,但是您正在提供Throwable.class

暂无
暂无

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

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