需要帮助在java中为命令行界面构建命令类

时间:2012-12-22 18:28:10

标签: java command command-line-interface

好的我正在构建这个电子表格应用程序,我正在通过命令行界面实现,我有一些命令,例如exit,它终止程序。

所以我有这个应用程序类,我有这些字段:

private ArrayList<Spreadsheet> spreadsheets;
private Spreadsheet worksheet;

和这个方法:

public void newSpreadsheet() {
  worksheet = new Spreadsheet();
  spreadsheets.add(worksheet);
}

然后我有这个看起来像这样的CommandIntepreter类:

package ui;

import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;

import ui.command.Command;
import ui.command.ExitCommand;
import ui.command.FailedCommand;
import ui.command.PrintCommand;
import ui.command.NewCommand;
import ui.command.ListCommand;
import ui.command.ChangeCommand;
import ui.command.SetCommand;
import ui.command.GetCommand;



import spreadsheet.*;
import spreadsheet.arithmetic.*;

public final class CommandInterpreter {

private CommandInterpreter() {
// The class should not be instanciated.
}

public static Command interpret(final Scanner scanner) {
final String keyword = scanner.next();
switch(keyword) {
  case "exit":
    return new ExitCommand();
  case "pws":
    return new PrintCommand();
  case "ns":
    return new NewCommand();
  case "ls":
    return new ListCommand();
  case "cws":
    return new ChangeCommand();
  case "set":
    return new SetCommand();
  case "get":
    return new GetCommand();

}
return new FailedCommand(
  String.format("Illegal start of command, \"%s\".", keyword));
}

}

然后我创建了NewCommand类,如下所示:

package ui.command;

import spreadsheet.Application;
import spreadsheet.Spreadsheet;

public final class NewCommand
 extends Command {

public void execute() {
 Application.instance.newSpreadsheet();
}
}

当我写ns时应该制作一个新的电子表格。但是当我这样做时,没有什么事情发生,所以你能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您必须调用NewCommand类的execute方法才能创建新的电子表格。我没有在你的代码中看到你做到的任何地方。

在此之前,我相信您正在尝试在此应用程序中使用Command Pattern。我建议你创建一个名为'Command'的接口,并使用'execute()'方法,然后在所有类中实现Command接口。如果您发现'ns'为命令行输入,则只需为New Command创建实例

case "ns":
Command nsCommand = new NewCommand();
nsCOmmand.execute();
return "SOME_MESSAGE"