使用Java中的函数指针实现简单的命令行解释器



我是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();
}

最新更新