我不知道它是否可行,但我可以在数组中存储方法或函数吗?我现在知道多维数组,并使用它来存储我想要的许多数组。我现在想做的是将我创建的方法或函数存储在某个类中。因为我想将我的所有函数存储到某个类中,所以如果我想使用循环则调用它。并使我的编码更清晰,更容易理解。 例如:
public String[] getDesiredFunction = {getName(),getLastname(),getMiddle()};
for(int i = 0;i<3;i++){
if(i == 1){
getDesiredFunction[i];
}
}
那样的?
它可以吗?
答案 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();
}
}