Java中的Javascript .apply()方法是否相同?

时间:2011-12-15 13:27:43

标签: java javascript parameters apply

我想用类名和可变数量的参数(即具有可变长度的Object [] args)在Java中创建一个类。有没有办法实现这个目标?

基本上,该方法在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);

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

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

谢谢!


为了澄清,这将是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

3 个答案:

答案 0 :(得分:6)

事实证明,您只需向Object[]函数提供invoke()即可,它的工作方式与Javascript中的.apply()完全相同。采取以下功能。

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

从同一个类中,它可以像

一样调用函数
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};    

答案 1 :(得分:1)

我认为你需要这样的东西。您可以使用反射调用方法。

      Method method =  Class.forName("className").getMethod("methodName", Parameter1.class, Parameter2.class);

      MethodReturnType result= (MethodReturnType) method.invoke(Class.forName("className"), new Object[]{parameter1, parameter2});

答案 2 :(得分:1)

它是这样的:

 Class.forName("foo").clazz.getConstructor(<classes>).newInstance(... parameters)

但与javascript不同,你有很强的打字能力,不得不说你喜欢哪种构造函数。