Joh*_*Doe 1 java hashmap args runnable
我需要制作一个包含一些参数的可运行 HashMap。
(我正在编写一个游戏,我想要:“当玩家输入特定命令时,它会运行一个带有 args 的特定 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));
Run Code Online (Sandbox Code Playgroud)
2=>稍后,在另一个空白处,获取如下命令:
cmdList.get("teleport").run("Player", "coords");
cmdList.get("kill").run("Player", "Message");
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点 ?还有另一种方法吗?
谢谢
由于 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));
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼它们:
cmdList.get("teleport").accept("Player", "coords");
cmdList.get("kill").accept("Player", "Message");
Run Code Online (Sandbox Code Playgroud)
您还可以使用方法引用而不是 lambda 来填充您的地图:
cmdList.put("teleport", SomeClass::myVoidWithArgs);
cmdList.put("kill", SomeClass::myOtherVoidWithArgs);
Run Code Online (Sandbox Code Playgroud)
(假设这些方法是 的static方法SomeClass;如果不是,则替换SomeClass为对包含这些方法的对象的引用)。
| 归档时间: |
|
| 查看次数: |
1991 次 |
| 最近记录: |