Java:带参数的可运行 HashMap

标签 java hashmap runnable args

我需要创建一个可运行的 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);

(假设这些方法是 staticSomeClass 方法;如果不是,则将 SomeClass 替换为对包含这些方法的对象的引用)。

关于Java:带参数的可运行 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45410573/

相关文章:

java - 从 HashMap 中返回特定值

java - Android - 正确的多线程

java - url 中的 %20 和 %2 之间的区别

java - 检查映射值是否包含特定字符串和受限列表中的元素

java - HashMap 和排序

java - 停止并重新运行自身内部的线程

java - 如何在可运行的 Runnable 内部隐藏 JavaFX 组件?

java - 使用 Maven : Getting java. lang.ClassNotFoundException : org. springframework.web.bind.support.WebDataBinderFactory

java - 使用 ForkChannel 时调用 MembershipListener#viewAccepted 时,RpcDispatcher#callRemoteMethods 不起作用

java - 将 Entry<String, List<String>> 转换为 Entry<String, String>