-1

我有一个像这样的抽象类

public abstract class Command {
    public abstract void execute(String keyWord[]);
    String keyWord;
    public Command(String keyWord) {
        this.keyWord = keyWord;
    }
}

和一个像这样管理它的类:

public class CommandManager {

    private static List<Command> commands = new ArrayList<>();


    public static void append(Command command) {
        commands.add(command);
    }

    static {

    }

    public static void load() {
        append(new Command("lol") {

            @Override
            public void execute(Player player, String[] keyWord) {
                System.out.println("hi");
            }
        });
    }

    public boolean handle() {
        String cmd[] = input.split(" ");
        Command command = commands.get(cmd[0].toLowerCase()); //this
        if (command != null) {
            command.execute(player, cmd);
            return true;
        }
        return false;
    }

}

我得到的错误是我的评论所在。如何使用 get 方法从 Command 类中获取字符串?谢谢

4

4 回答 4

2

问题是 get() 方法需要一个int表示列表索引的值。

于 2012-06-22T05:23:29.997 回答
0

如何使用 get 方法从 Command 类中获取字符串?

最简单的 一个简单的方法是keyWordCommand类中创建getter方法,然后

commands.get(index).getKeyWord(); //this will return the string

index是一个整数变量,指示列表中的命令类索引。并且不要忘记检查空值。获取方法将类似于

public String getKeyWord() {
    return this.keyWord;
}
于 2012-06-22T05:22:21.080 回答
0

命令是一个ArrayListget()函数接受一个int参数。

要么使用数字,要么使用 aMap<String,Command>作为您的代码。

于 2012-06-22T05:22:58.413 回答
0

我猜你想要具有匹配关键字的命令,所以试试这个:

Command command = null;
for (Command c : commands) {
    if (c.keyWord.equalsIgnoreCase(cmd[0])) {
        command = c;
        break;
    }
}

// command will not either be null or be the Command whose keyword matches


ps 我建议使用 goolging 来获取有关 java 和 OOP 的教程。

于 2012-06-22T05:26:27.007 回答