1

我不知道它是否可行,但我可以将方法或函数存储在数组中吗?我现在知道多维数组并用它来存储我想要的许多数组。我现在想做的是将我创建的方法或函数存储在某个类中。因为我想将我的所有函数存储到某个类,然后如果我想使用循环调用它。并使我的编码更清晰易懂。例子:

public String[] getDesiredFunction = {getName(),getLastname(),getMiddle()};
for(int i = 0;i<3;i++){
    if(i == 1){
        getDesiredFunction[i];
    }
}

像那样?有可能吗?

4

5 回答 5

4

您不能完全按照您的意愿做,但可以使用以下方法做类似的事情interface

interface Function {
    public void run();
}

class GetNameFunction implements Function {
    public void run() {
        //do stuff
    }
}
...

然后你可以这样写:

Function[] functions = {new GetNameFunction()};
    for(int i = 0; i < functions.length; i++){
        functions[i].run();
    }
}
于 2012-07-13T07:38:59.097 回答
1

Java 6 没有一阶函数,但您可以使用函数对象模式:

interface NullaryFunction< B > {
    B f();
}

public class Example {
    private final Map< String, NullaryFunction< String > > mFuncs = new HashMap< String, NullaryFunction< String > >() { {
        put( "getName", fncGetName );
        put( "getLastname", fncGetLastname );
        put( "getMiddle", fncGetMiddle );
    } };
    public String getName() { /* ... */ }
    private NullaryFunction< String > fncGetName = new NullaryFunction< String >() {
        @Override String f() { return getName(); }
    };
    public String getMiddle() { /* ... */ }
    private NullaryFunction< String > fncGetMiddle = new NullaryFunction< String >() {
        @Override String f() { return getMiddle(); }
    };
    public String getLastname() { /* ... */ }
    private NullaryFunction< String > fncGetLastname = new NullaryFunction< String >() {
        @Override String f() { return getLastname(); }
    };

    public String runAFunction( String strName ) {
        return mFuncs.get(strName).f();
    }
}
于 2012-07-13T07:37:28.303 回答
0

Java 不太适合您的用例。可以用反射来做。

作为起点,您可以查看反射轨迹或查看相关的stackoverflow 问题

于 2012-07-13T07:15:17.387 回答
0

您可以将对象实例和方法名称存储为字符串,使用反射可以像这样调用此方法:

public class Test {


public void sayHello(){
    System.out.println("hello");
}
/**
 * @param args
 */
public static void main(String[] args) {
    Test test = new Test();
    String methodName = "sayHello";
    try {
        Method m = test.getClass().getMethod(methodName, null);
        m.invoke(test, null);
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}

}

你需要参考java反射

于 2012-07-13T07:23:26.283 回答
-2

你在问题中所说的方式行不通。作为替代方案,您可以这样做:

public String[] getDesiredFunction = {getName(),getLastname(),getMiddle()};
for(int i = 0;i<3;i++){
if(getDesiredFunction[i].equals("getName()")){
     getName();
  }
}
于 2012-07-13T07:17:29.473 回答