我尝试使用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

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

#1楼 票数:0 已采纳

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

  ask by shijie xu translate from so

未解决问题?本站智能推荐:

2回复

IllegalArgumentException:JavaConstructor.newInstance()中的参数数量错误

考虑以下代码, 它出什么问题了? 我收到以下异常: 线程“main”中的异常 java.lang.IllegalArgumentException:sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at su
2回复

具有IllegalArgumentException构造函数的数组构造函数

对于我的构造函数,这是我在下面做的事情,这是我到目前为止编写的代码块,即使我确定这是错误的,所以我如何在下面写下这个代码呢? 谢谢 :) 对于此构造函数,我必须使用给定的数组初始化网格,如果该数组在任何维度上的大小均为零,则必须抛出IllegalArgumentException。 构造
3回复

反射IllegalArgumentException导致

更新 - 使问题更清楚。 在通过反射调用方法时获取ClassCastException的可能原因是什么? 在尝试通过反射调用方法时,我将以下stacktrace作为我的应用程序的一部分。 我尝试了一个示例类,并将不同类型的各种参数传递给它,但我总是得到一个这个例外。 更新 -这是
1回复

Field.set引发IllegalArgumentException

我试图在Java中为摆动对象做单向数据绑定,就像一个练习一样。 当前,对于扩展JTextComponent的swing对象,我添加了一个文档侦听器,该侦听器还更新了后备数据存储。 public class Binder {Map<JComponent, Map.Entry<Weak
6回复

Java:没有默认构造函数的类的newInstance

我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要)。 他们必须为某些类创建构造函数,并为它们添加一些方法。 后来,通过我提供的测试功能,他们将检查它们是否正常。 我想做的是, 通过反射 ,创建一个我想要测试的类的新实例。 问题是,有时候, 没有默认的构造函数 。
1回复

为什么通过Method.Invoke抛出IllegalArgumentException?

对于编程的实际任务,我们给出了一个示例.class文件。 我们需要打印出所有使用1 x int输入和一些可打印输出的方法,然后允许用户使用通过命令行指定的一个输入来运行该方法。 但是,当我尝试调用该方法时,将抛出IllegalArgumentException。 我的代码抛出异常:
1回复

参数类型不匹配:简单情况下为IllegalArgumentException

我有一个关于IllegalArgumentException的著名问题,我不知道为什么。 这是我的课: 在我的测试案例(尝试调用我的方法)中: 它始终位于IllegalArgumentException上。 Method对象听起来符合我的期望,例如: 任何想法在那里发生了
2回复

Javajava.lang.IllegalArgumentException:参数数量错误

我尝试在具有不可见构造函数 Class(String var0, Logger var1, LoggerContext var2) 的最终类中访问 info(String var) 方法try {Constructor<? extends Logger> var0 = logger.ge