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

Java遍历String数组匹配类名后获取对应类静态字段的实现问题

推荐实现:静态映射表(优先选这个)

这种方式编译期可校验,性能更高,无需处理异常:

  1. 先在CogsController类中新增静态映射表和初始化逻辑:
import java.util.HashMap;
import java.util.Map;

public class CogsController {
    // 原有变量保持不变
    public static String[] cogSuits = {"Bossbot", "Lawbot", "Cashbot", "Sellbot"};
    public static String[] bbCogNames = {"Flunky", "Pencil Pusher"};
    public static String[] lbCogNames = {"Temp1", "Temp2"};
    public static String[] cbCogNames = {"Temp3", "Temp4"};
    public static String[] sbCogNames = {"Temp5", "Temp6"};
    public static String[] cogNames[] = {bbCogNames, lbCogNames, cbCogNames, sbCogNames};

    // 新增攻击属性映射表
    public static final Map<String, int[][][]> COG_ATTACKS = new HashMap<>();
    // 静态块初始化映射关系
    static {
        COG_ATTACKS.put("Flunky", Flunky.attacks);
        COG_ATTACKS.put("Pencil Pusher", PencilPusher.attacks);
        COG_ATTACKS.put("Temp1", Temp1.attacks);
        COG_ATTACKS.put("Temp2", Temp2.attacks);
        COG_ATTACKS.put("Temp3", Temp3.attacks);
        COG_ATTACKS.put("Temp4", Temp4.attacks);
        COG_ATTACKS.put("Temp5", Temp5.attacks);
        COG_ATTACKS.put("Temp6", Temp6.attacks);
    }
}
  1. 在Cog构造方法中匹配到cogName后,直接取值即可:
// 匹配到cogName之后加这行
storedAttacks = CogsController.COG_ATTACKS.get(cogName);
// 可以加个兜底逻辑避免空指针
if (storedAttacks == null) {
    storedAttacks = new int[0][][];
}
可选实现:反射(不推荐,仅满足字符串转类的需求)

如果一定要通过cogName动态获取类对象,可以用Java反射实现,注意要处理类名空格、包路径匹配和异常:

try {
    // 先处理cogName的空格,类名不允许有空格,比如"Pencil Pusher"要转为"PencilPusher"
    String className = cogName.replaceAll("\\s+", "");
    // 替换为你实际的类所在的包名,比如所有cog类都在com.game.cogs包下就写"com.game.cogs." + className
    Class<?> clazz = Class.forName("你的完整包路径." + className);
    // 获取静态attacks字段
    Field field = clazz.getField("attacks");
    // 静态字段传null即可取值
    storedAttacks = (int[][][]) field.get(null);
} catch (Exception e) {
    e.printStackTrace();
    // 异常兜底
    storedAttacks = new int[0][][];
}

反射的缺点是运行时才会暴露类名错误、路径错误等问题,性能也远低于静态映射表,仅适合类数量极多、不方便手动维护映射的场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:27:03