我是Java新手,我正在尝试构建一个执行一些命令的简单cli。在验证部分,我需要在C中制作一个类似函数指针的东西,但在Java中使用接口似乎无法实现。
class Com{
int argsCount;
//pointer to function
public Com (int argCount)
{
this.argsCount=argCount;
}
}
Map <String,Com> verMap= new HashMap<String,Com>();
verMap.put("clear", *here*);
interface clearConsoleFunction {
public String clearConsole();
}
clearConsoleFunction函数的主体应该这样做:
Runtime.getRuntime().exec("cls");
我所需要的只是从地图中调用此处部分的clearConsole,这就是我尝试使用接口的原因,因为我不知道还能怎么做,而且我似乎也做不好。
如果要使用接口作为函数指针替换,则必须实现单个接口,而不是每个命令的接口。
如果你不想为每个命令创建一个类,你可以使用一个匿名类
package com.me;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String [] args) {
Map<String, CommandRunner> verMap = new HashMap<String, CommandRunner>();
// Add all the commands :
verMap.put("clear", new CommandRunner() {
@Override
public String run() {
try {
Runtime.getRuntime().exec("cls");
} catch (IOException e) {
throw new RuntimeException(e);
}
return "";
}
});
// Run it
verMap.get("clear").run();
}
}
和CommandRunner接口:
package com.me;
public interface CommandRunner {
String run();
}