gpt4 book ai didi

java - 将接口(interface)的类​​信息存储在 HashMap 中,并稍后创建该接口(interface)的实例

转载 作者:行者123 更新时间:2023-12-02 05:34:17 26 4
gpt4 key购买 nike

我想创建一个以String为键的HashMap,以及一个代表实现ICommand的类的值。我想这样做是因为我想获取一个字符串形式的命令,检查该命令是否存在(已加载到 HashMap 中),创建该命令的实例,然后运行它。我知道 TypeType 可以表示任何类型的类,而不是实现我的接口(interface)的东西。到目前为止我有以下内容:

我知道我可以使用 switch,但它很难看,稍后可能会添加自定义命令。

public class Commands
{
// will register commands later
HashMap<String, Type> _commands;
public void parseCommand(String command)
{
String[] args = command.split("\\s+");
if (args.length > 0 && _commands.containsKey(args[0]))
{
// should create instance of _commands[args[0]] here
}
}

// will load commands dynamically later
public interface ICommand
{
public String getCommandName();
public void execute(String args);
//public void printHelp();
}

public class HelpCommand implements ICommand
{
public String getCommandName()
{
return "help";
}
public void execute(String args)
{
System.out.println("help - print help");
System.out.println("exit - quit the server");
System.out.println("register username password - creates user");
}

}

public class ExitCommand implements ICommand
{
public String getCommandName()
{
return "exit";
}
public void execute(String args)
{
// todo save state, log out users, etc.
System.exit(0);
}
}
}

最佳答案

Map<String, Class<? extends ICommand>> map;
Class<? extends ICommand> type = map.get("someCommand");
ICommand command = type.newInstance();
command.execute();

听起来你应该存储Class而不是Type。通过限制 Map 来保存扩展 ICommandClass 实例,我相信您已经得到了您想要的。

除了上述所有内容之外,您可能需要考虑存储类实例的工厂实例。 接口(interface) ICommandFactory { ICommand createNewInstance();}

根据 Pacha,您可以使用 map.put("someKey", SomeConcreteClass.class); 添加类的实例;

关于java - 将接口(interface)的类​​信息存储在 HashMap 中,并稍后创建该接口(interface)的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com