让我们举例说,我们将把函数绑定到一个hashmap
if(identity.equals("printf")){
doPrintf(statement);
}else if(identity.equals("scanf")){
doScanf(statement);
}else if(identity.equals("puts")){
doPuts(statement);
}else if (identity.equals("functioncall")){
expectFunc = true;
}else if (identity.equals("functioncallwithparams")){
expectFunc = true;
expectParams = true;
}else if (identity.equals("assignment")){
//doAssignment(statement);
vartoupdate = statement;
updateVar = true;
}else if(identity.equals("getch"))
doGetch();
像这样的HM.put(“getch”,doGetch())。你怎么可能这样做?
答案 0 :(得分:3)
如果我正确地提出了您的问题,您希望根据其名称(或至少部分名称)调用方法。如果是这样,你应该看一下reflection API,这里有一个相关的问题,关于SO btw:How do I invoke a Java method when given the method name as a string?
答案 1 :(得分:2)
如果您可以为每个函数创建一个新对象,可以通过为每个要调用的函数创建一个Function
对象并维护函数名称和它的相应函数之间的映射来实现。对象
public interface Function<T> {
public T apply(Object... vargs);
}
现在让每个函数对象实现这个接口,为每个新创建的类创建新对象并将它们填充到地图中。
答案 2 :(得分:2)
interface Func {
public void exec();
}
class GetCharFunc implements Func {
@Override
public void exec() {
// implementation details
}
}
Func currentFunc;
if(identity.equals("getch")) {
currentFunc = new GetCharFunc();
myMap.put("getch", currentFunc);
}
答案 3 :(得分:2)
如果所有功能都实现了相同的接口,则可以执行此操作。对你来说,情况似乎并非如此。
答案 4 :(得分:1)
Java不支持将方法或函数作为语言功能的引用。您可以使用一种方法创建接口,并使用不同的方法调用多次实现此接口,或使用Reflection将java.lang.reflect.Method
对象放入哈希映射中。
答案 5 :(得分:1)
如果您使用的是Java 7,则可以使用基于switch
值的String
语句。这是一个简短的教程:Use String in the switch statement with Java 7
如果Java 7不是一个选项,我认为下一个最好的选择是打开一个枚举。这是关于enum types的教程。
也许如果你解释了你想要解决的问题,你会得到更好的答案。