javassist.调用带有可变参数的方法时不能编译异常



我试图通过javassist调用java.util.Arrays.asList(..)。但是得到下面的异常

javassist.CannotCompileException: [source error] asList(java.lang.Double,java.lang.Double,java.lang.Double) not found in java.util.Arrays

我将修饰符设置为:

m.setModifiers(m.getModifiers() | javassist.Modifier.VARARGS);

尽管如此,我还是得到了异常。

也就是说,Javassist不理解我在调用:

public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}

它显式地寻找如下方法:

public static <T> List<T> asList(T a, Ta1, Ta2) {
return new ArrayList<>(a);
}

如何使Javassist识别正在调用的带有变量的方法?

@javaseeker,你为什么不回应我的评论并提供更多的上下文信息?您告诉我们希望调用哪个方法,但不显示实际准备和执行调用的代码。这是没用的。

无论如何,我将冒险进行有根据的猜测:可能您尝试使用多个参数调用目标方法,因为它将从普通Java源代码调用。但是像T... a这样的可变参数实际上只是T[]在参数列表末尾的语法糖。因此,如果您准备了一个T[]并将其作为参数交给该方法,它应该像预期的那样工作,请参阅Javassist教程,章节"varargs":

要在Javassist中嵌入的编译器编译的源代码中调用该方法,必须编写:

length(new int[] { 1, 2, 3 });

而不是使用varargs机制调用这个方法:

length(1, 2, 3);

顺便说一句,在你的情况下,你似乎需要一个Double[],从你的错误信息判断。

最新更新