Javascript .apply() 方法在 Java 中等效吗? [英] Javascript .apply() method equivalent in Java?

查看:23
本文介绍了Javascript .apply() 方法在 Java 中等效吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据类名和可变数量的参数(即具有可变长度的 Object[] args)在 Java 中创建一个类.有什么办法可以实现吗?

I want to create a class in Java from a classname and an variable number of arguments (i.e. an Object[] args with variable length). Is there any way to achieve that?

基本上,该方法在Javascript中看起来像这样

Basically, the method would look like this in Javascript

function createClass(classname, args) {
    protoObject = Object.create(window[classname].prototype);
    return window[classname].apply(protoObject,args) || protoObject;
}
// I want to be able to do this:
var resultClass = createClass("someClass", someArrayOfArgs);

一个只调用一个函数的更简单的函数看起来像

A simpler function to only call a function would look like

function callFunction(functionName, args) {
    return window[functionName].apply(null,args);
}

谢谢!

为了澄清,这将是 Javascript 中的一些示例用法:

For clarification, this would be some example usage in Javascript:

function multiplyResult(var1,var2) { 
    return var1*var2;
}
var result = callFunction("multiplyResult", ["5", "2"]); // == 10

function multiplyObject(var1,var2) { 
    var result = var1 * var2;
    this.getResult = function() { return result }; 
}
var result = createClass("multiplyObject", ["5", "2"]).getResult(); // == 10

推荐答案

事实证明,您可以简单地向 invoke() 函数提供一个 Object[] 并它的工作方式与 Javascript 中的 .apply() 完全一样.取下面的函数.

It turns out that you can simply provide an Object[] to the invoke() function and that it will work exactly like .apply() in Javascript. Take the following function.

public int multiply(int int1, int int2) {
    return int1*int2;
}

从同一个类,调用函数就像

From the same class, it works to call the function like

Object result = this.getClass().getDeclaredMethod("multiply",classes).invoke(this,ints);

classesints 类似于

Class[] classes = new Class[] {int.class, int.class};
Object[] ints = new Object[] {2,3};    

这篇关于Javascript .apply() 方法在 Java 中等效吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆