我需要创建一个带有一些args的可运行的HashMap。
(我正在编写游戏,我想要:"当玩家输入特定命令时,它会使用args运行一个特定的空格,缓存在我的HashMap中。&# 34)
代码将(可能)比我更明确:
1 => 制作一个命令列表地图,每个键都应该运行:
- " myVoidWithArgs(arg1,arg2)"
- " myOtherVoidWithArgs(arg1,arg2)"
-etc。 (arg1& arg2应为字符串)
HashMap<String, Runnable> cmdList = new HashMap<>();
cmdList.put("teleport", () -> myVoidWithArgs(arg1, arg2));
cmdList.put("kill", () -> myOtherVoidWithArgs(arg1, arg2));
2 =&gt; 然后,在另一个虚空中,获取如下命令:
cmdList.get("teleport").run("Player", "coords");
cmdList.get("kill").run("Player", "Message");
我该怎么做?还有其他办法吗?
由于
答案 0 :(得分:4)
由于runnables需要两个参数,因此Runnable
接口不是地图中值所需的接口。请改用BiConsumer<String, String>
;然后你可以这样做:
Map<String, BiConsumer<String, String>> cmdList = new HashMap<>();
cmdList.put("teleport", (arg1, arg2) -> myVoidWithArgs(arg1, arg2));
cmdList.put("kill", (arg1, arg2) -> myOtherVoidWithArgs(arg1, arg2));
你可以像这样打电话给他们:
cmdList.get("teleport").accept("Player", "coords");
cmdList.get("kill").accept("Player", "Message");
您还可以使用方法引用而不是lambdas来填充地图:
cmdList.put("teleport", SomeClass::myVoidWithArgs);
cmdList.put("kill", SomeClass::myOtherVoidWithArgs);
(假设方法是static
的{{1}}方法;如果不是,则通过对包含方法的对象的引用替换SomeClass
。