Java如何通过字符串变量获取对应名称的数组?
解决方案:使用Map映射替代独立静态数组
直接用**键值对映射(Map)**来管理这些人物数组是最简洁高效的方案,完全不用写大量分支代码,具体实现如下:
1. 重构代码为Map存储
把原来分散的静态数组统一放到一个Map<String, String[]>中,用人物名字作为键,对应的属性数组作为值:
import java.util.HashMap; import java.util.Map; public class YourClassName { // 用Map存储所有人物的属性数组 static Map<String, String[]> personDataMap = new HashMap<>(); // 静态初始化块,填充所有人物数据 static { personDataMap.put("Laura", new String[]{"Female", "Blond"}); personDataMap.put("Phil", new String[]{"Male", "Brunette"}); personDataMap.put("Mark", new String[]{"Male", "brown"}); // 依次添加剩下的147个人物数据即可 } static String[] Person = {"Gender", "Haircolor"}; public static void main(String[] args) { // 模拟用户输入的名字 String inputName = "Laura"; // 根据输入获取对应数组并替换Person if (personDataMap.containsKey(inputName)) { Person = personDataMap.get(inputName); } else { // 处理输入名字不存在的情况,比如保留原数组或提示 System.out.println("未找到该人物的信息"); } } }
2. 方案优势
- 无需编写大量
if-else或switch分支,150个人物只需在初始化块中依次添加即可 - 后续新增、修改或删除人物数据,只需修改Map的初始化逻辑,维护成本极低
- 代码可读性强,逻辑清晰,性能比反射方案更稳定
备选方案:反射(不推荐)
如果不想修改原有静态数组的定义,也可以用反射通过字段名获取数组,但此方案存在性能差、代码可读性低、易抛出异常的问题,仅作参考:
public class YourClassName { static String[] Laura = {"Female", "Blond"}; static String[] Phil = {"Male", "Brunette"}; static String[] Mark = {"Male", "brown"}; static String[] Person = {"Gender", "Haircolor"}; public static void main(String[] args) { String inputName = "Laura"; try { // 通过反射获取静态字段 Field field = YourClassName.class.getDeclaredField(inputName); Person = (String[]) field.get(null); // 静态字段无需传入实例,传null即可 } catch (NoSuchFieldException | IllegalAccessException e) { // 处理字段不存在或访问权限异常 e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者Lasse Linow
相关产品推荐
相关产品推荐

