You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将变量值作为变量名使用而非纯文本?

在Java中实现字符串到变量的映射(避免大量if语句)

嘿,这个需求太常见了!Java作为静态类型语言,没法直接把字符串当作变量名来直接引用(毕竟变量名在编译阶段就固定死了),但我们可以用Map(映射表)来完美解决这个问题,彻底告别一堆嵌套的if/else语句。

解决方案步骤:


1. 先定义你的转子规则

假设你原本的Rotor_I、Rotor_II是存储字符映射的字符串(比如恩尼格玛机的转子布线),先把它们定义好:

// 示例:恩尼格玛机转子的布线规则
String Rotor_I = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
String Rotor_II = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
String Rotor_III = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
// 你可以继续定义更多转子...

如果你的转子有更复杂的逻辑(比如偏移量、反转映射、步进机制),更推荐把转子封装成自定义类,扩展性更强:

class Rotor {
    private String wiring;
    // 可以添加其他属性,比如当前偏移量、反转布线等

    public Rotor(String wiring) {
        this.wiring = wiring;
    }

    // 提供获取对应位置字符的方法
    public char getMappedChar(int position) {
        // 这里可以加入偏移量等逻辑,示例先简化
        return wiring.charAt(position);
    }
}

2. 用Map建立名称到转子的映射

把转子名称(比如"Rotor_I")和对应的转子实例/字符串绑定到Map中:

// 如果是用字符串存储转子:
Map<String, String> rotorMap = new HashMap<>();
rotorMap.put("Rotor_I", Rotor_I);
rotorMap.put("Rotor_II", Rotor_II);
rotorMap.put("Rotor_III", Rotor_III);

// 如果是用自定义Rotor类:
Map<String, Rotor> rotorMap = new HashMap<>();
rotorMap.put("Rotor_I", new Rotor("EKMFLGDQVZNTOWYHXUSPAIBRCJ"));
rotorMap.put("Rotor_II", new Rotor("AJDKSIRUXBLHWTMCQGZNPYFVOE"));

3. 直接通过字符串获取对应的转子

现在你拿到slowRotor的字符串后,直接从Map里取出对应的转子即可,完全不用if语句:

String slowRotor = GUI.getRotorInPosition("slow");
int position = alphabet.indexOf(result);
String resultAfterRotor = "";

// 用字符串从Map中获取转子(字符串版本)
String targetRotor = rotorMap.get(slowRotor);
resultAfterRotor = Character.toString(targetRotor.charAt(position));

// 如果是自定义Rotor类版本:
Rotor targetRotor = rotorMap.get(slowRotor);
resultAfterRotor = Character.toString(targetRotor.getMappedChar(position));

为什么不用eval或者反射?


虽然Java里可以用反射来通过字符串获取变量,但这种方式非常不推荐:

  • 反射会让代码变得难以维护、可读性差
  • 存在安全风险(如果字符串来源不可信)
  • 性能比Map差很多

而Map的方式既安全、高效,又易于扩展——以后要加新转子,只需要往Map里多put一个键值对就行,完全不用修改业务逻辑代码。

内容的提问来源于stack exchange,提问作者D74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:30