Java中如何通过循环简化大量重复相似的条件执行代码?
简化重复Java代码的方案
核心思路
别再用binding1、binding2这类单个变量,改用**集合(比如List<KeyBinding>)**存储所有绑定实例;同时把配置里的bindValue1、bindValue2也改成集合形式,靠循环批量处理重复逻辑,不用手写上百个case。
代码示例1的简化
原代码通过switch根据count创建对应数量的KeyBinding,直接用for循环就能替代:
优化后代码
// 定义集合存储所有绑定实例 List<KeyBinding> bindings = new ArrayList<>(); // 循环创建并注册绑定 for (int i = 1; i <= count; i++) { KeyBinding binding = KeyBindingHelper.registerKeyBinding( new KeyBinding( "key.lightningtow.hotkey_keyValue" + i, InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN, "key.category.hotkey" ) ); bindings.add(binding); }
不管count是1还是100,这段代码都能自动适配,不用改结构。
代码示例2的简化
原代码的switch不仅重复代码多,还没加break会导致逻辑穿透(比如case1执行完会继续跑case2、case3的代码),优化时同样用循环处理:
前提调整
先修改hotkeyConfig,把bindValue1、bindValue2这类单个字段改成集合(比如List<String> bindValues),保证绑定和配置一一对应。
优化后代码
for (int i = 0; i < hotkeyConfig.bindingCount; i++) { KeyBinding currentBinding = bindings.get(i); String currentCommand = hotkeyConfig.bindValues.get(i); while (currentBinding.wasPressed()) { client.player.sendCommand(currentCommand); } }
这段代码会循环处理前bindingCount个绑定和对应的命令,完全替代原switch的所有case逻辑。
补充说明
如果没法修改hotkeyConfig的结构(比如不能用集合存bindValue),可以用反射动态获取bindValue1这类字段,但反射性能差、可读性低,优先推荐调整配置结构用集合存储。
内容的提问来源于stack exchange,提问作者lightningtow
相关产品推荐
相关产品推荐

