在Java中使用函数指针作为简单的命令行解释器

时间:2014-10-29 10:44:36

标签: java function pointers interface command-line-interface

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

我只需要从地图中调用 here 部分中的clearConsole,这就是我尝试使用界面的原因,因为我不知道它是怎么回事可以做到,我似乎无法做到。

1 个答案:

答案 0 :(得分:1)

如果要将接口用作函数指针替换,则必须实现单个接口而不是每个命令的接口。

如果您不想为每个命令创建一个类,则可以使用匿名类

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