java 函数 数组_Java中的函数数组?

本文探讨了在Java中处理命令的方法,介绍了使用Map<String,Runnable>来存储命令名称和对应的处理函数,并讨论了这种方法相较于if语句和反射的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

也许我在C语言中花了很多心思,但是我没有看到如何在Java中正确解决此问题的解决方案.

我从服务器收到响应,该响应发送如下字符串:

command params

客户端接收到该字符串并提取命令.现在,我想调用一个知道如何处理命令的函数.在C方面,解决方案是显而易见的.我用命令名和关联的函数点实现了一个数组,因此我可以简单地遍历该数组并调用该函数.

有没有办法在Java上做到这一点?我不知道我可以根据名称调用函数.所以目前我看到以下选项:

>执行一系列的if(command.euqals(COMMAND)

>对于每个命令,我可以创建一个单独的对象,并将其存储在数组中(非常混乱).

>使用反射,因此我可以得到一个包含函数名称与命令名称的映射.

还有其他选择吗?

if语句不是最佳的IMO,但是至少它允许编译器错误和类型检查.使用反射至少更优雅,因为我可以更轻松地循环和扩展它,但是,当然,这意味着如果我输错名称,我只能看到运行时错误.

解决方法:

您的第二个主意是惯用的.使用Map< String,Runnable>存储命令名称和相应的代码,然后使用commands.get(commandName).run()执行一个.

不要害怕创建类!它可能使您的代码开始时更加冗长,但是编写类而不用担心,比使用switch或if … else if ….如果您的命令曾经比单一方法(也许是toString(),undo()…)复杂得多,您会越来越高兴地发现您使用了多态而非条件.

标签:java,jump-table

来源: https://codeday.me/bug/20191122/2063673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值