在数组中存储方法和函数

时间:2012-07-13 07:10:10

标签: java android

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

public String[] getDesiredFunction = {getName(),getLastname(),getMiddle()};
for(int i = 0;i<3;i++){
    if(i == 1){
        getDesiredFunction[i];
    }
}
那样的? 它可以吗?

5 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分: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();
    }
}

答案 2 :(得分:0)

Java不太适合您的用例。可以使用reflection

作为起点,您可以查看the reflection trail或查看相关的stackoverflow question

答案 3 :(得分: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 refection

答案 4 :(得分:-2)

您在问题中说明的方式不起作用。作为替代方案,您可以这样做:

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