当前位置: 首页 > 知识库问答 >
问题:

有没有办法用MethodCall[]作为参数来调用方法?

逄念
2023-03-14

我需要调用一个方法:myMethod(双...选项卡),但我通过其他方法调用获取此数组的元素。现在我做的是:

    MethodCall anotherMethod(MethodCall[] t){
        MethodCall form = MethodCall.invoke(myMethod);
        for (int i = 0; i < t.length; i++) {
            form = form.withMethodCall(t[i]);
        }
    }

但是有了它,myMethod是这样声明的:

double myMethod(double t1, double t2, double t3, ..., double t10){...}

我想知道如何使用bytebuddy来代替:

double myMethod(double ... tab){...}

double myMethod(double[] tab){...}

此外,属性“form”是一个动态检索方法,因此在“for”中执行的循环数永远不会相同。所以有时我可以调用这样的表单方法:方法1(双val){...}方法2(双val1,双val2){...}方法3(双... tab){...}

共有1个答案

薛欣荣
2023-03-14

Varargs实际上并不存在于字节码中,只存在于Java代码中。必须为每个参数(可以是MethodCall)赋值,其中单个值需要是MethodCall,数组需要另一个。不幸的是,不支持从MethodCalls创建数组。

 类似资料:
  • 假设我有这样一个类和方法: 是否可以强制编写调用的代码的人显式地为方法调用提供类型见证? 我想做的是在调用方法时总是需要参数。有办法做到这一点吗?我知道我总是可以添加一个参数,但是我正在探索其他选项。

  • 问题内容: 有没有办法使用泛型说“此方法返回”? 当然,我想在子类中重写此方法,因此声明应与一起使用。 这是一个例子: 根本不起作用:我收到“类型不匹配:无法从Base转换为T”。如果我强制使用强制转换,则覆盖将失败。 问题答案: 不,无法表达这一点。只需声明该方法即可返回类的类型。Java具有协变返回类型,因此无论如何您都可以重写方法以返回更特定的类型。 如果您想为此添加一些标记,则可以随时引入

  • 我试图理解当我遇到诸如“groovy.lang.MissingMethodException:无方法签名:Three.method()适用于参数类型”之类的错误时会发生什么:

  • 问题内容: 我发现C#中的命名参数功能在某些情况下非常有用。 如果要在JavaScript中使用该怎么办? 我不想要的是: 我已经使用过这种方法。还有另一种方法吗? 我可以使用任何库来做到这一点。 问题答案: ES2015及更高版本 在ES2015中, 参数解构可用于模拟命名参数。这将要求调用者传递一个对象,但是如果您还使用默认参数,则可以避免函数内部的所有检查: ES5 有一种方法可以接近您想要

  • 问题内容: 我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如: 这是通过以下方式调用的: 接口定义为: 我的问题:是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢? 问题答案: 编译器从 LHS 分配中使用的具体类型推断出类型。 从此链接: 如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果

  • 我在石英(Spring启动应用程序)有一个cron工作。我已经为调度器、触发器、cron作业和所有其他bean创建了bean。作业的目的是基于指定的cron表达式运行。但是对于作业的每个新执行,我希望传递一些特定于该作业的数据到作业详细对象。但是目前,当我试图在JobDetailFactory bean中传递这样的数据时,它只被创建一次(第一次),对于作业的所有进一步执行,传递的都是相同的陈旧数据