我需要创建一个可运行的 HashMap,其中包含一些参数。
(我正在编写一个游戏,我想要:“当玩家输入特定命令时,它会运行带有参数的特定 void,缓存在我的 HashMap 中。”)
代码将(也许)比我更明确:
1=>制作命令列表的映射,每个键应该运行:
-“myVoidWithArgs(arg1,arg2)”
-“myOtherVoidWithArgs(arg1,arg2)”
-等等。 (arg1 和 arg2 应该是字符串)
HashMap<String, Runnable> cmdList = new HashMap<>();
cmdList.put("teleport", () -> myVoidWithArgs(arg1, arg2));
cmdList.put("kill", () -> myOtherVoidWithArgs(arg1, arg2));
2=> 然后,在另一个空白处,获取如下命令:
cmdList.get("teleport").run("Player", "coords");
cmdList.get("kill").run("Player", "Message");
我怎样才能做到这一点?还有其他方法吗?
谢谢
最佳答案
由于可运行对象需要两个参数,因此 Runnable
接口(interface)不是您在 map 中的值所需要的。使用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");
您还可以使用方法引用而不是 lambda 来填充映射:
cmdList.put("teleport", SomeClass::myVoidWithArgs);
cmdList.put("kill", SomeClass::myOtherVoidWithArgs);
(假设这些方法是 static
的 SomeClass
方法;如果不是,则将 SomeClass
替换为对包含这些方法的对象的引用)。
关于Java:带参数的可运行 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45410573/