我在java中编写一个shell实现,它支持通过向Command
添加Map<String, Command>
对象并编写与此命令关联的类来添加新命令。
commandList.put("sort", new sort()); // sort extends Command
每个命令都有多个OptionsDefinition<T>
,它们使用Consumer<T>
对象将选项名称与方法引用相关联(T是命令的类:例如,排序)。
我想让方法引用非静态,以便能够在我的shell中调用相同的命令两次而不混合相同命令的属性的值,所以我需要传递{{在我的sort命令示例中,this
类型为sort
。
我想知道如何改变我拥有的东西:
Consumer<sort>
到那个:
Command sort = commandList.getCommand("sort");
能够使用
sort sort = commandList.getCommand("sort");
是否可以这样做?
答案 0 :(得分:1)
您可以使用隐式转换实现getCommand。
public <C extends Command> C getCommand(String name) {
return (C) commands.get(name);
}
然后你可以写
Sort sort = commandMap.getCommand("sort");
注意:
禁止警告。
public <C extends Command> C getCommand(String name) {
@SuppressWarning("unchecked")
C c = (C) commands.get(name);
return c;
}