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

为什么这段Java代码中尝试赋值后Plant对象仍然为null?

问题排查方案
  • 先确认读取到的type实际编码值:你当前只打印了type的字符展示效果,无法区分看起来相同但编码不同的字符(比如全角小写p和半角小写p视觉完全一致,但编码值不同),新增一行代码打印字符的ASCII值验证:
char type = typeStr.charAt(0);
// 新增该行排查问题
System.out.println("type字符的编码值为:" + (int)type);

半角小写p的编码值为112,如果输出值不符,说明读取到的不是预期的半角小写p,对应修复方案:

  • 如果是全角字符问题,修改文件内容为半角字符,或者修改判断条件匹配全角字符即可
  • 如果是不可见字符问题,调用trim()处理typeStr后再取首字符:char type = typeStr.trim().charAt(0);
  • 确认字段读取顺序和文件内容一致:检查文件每行的字段顺序是否严格匹配你读取的顺序:名称->类型标识->养分值,顺序错位会导致typeStr实际读取到其他字段的内容,自然无法命中判断条件
  • 新增兜底逻辑避免空指针:当前代码如果type不匹配三个枚举值,tempPlant会是null,执行addPlant时大概率触发空指针异常,建议新增异常分支提示:
} else {
    throw new IllegalArgumentException("不支持的植物类型:" + type);
}
  • 可选优化:如果类型标识本身就是单个字符的字符串,可以直接用字符串匹配,规避首字符读取异常的问题:
if ("p".equals(typeStr.trim())) {
    tempPlant = new Puffs(name, nutrients);
} else if ("b".equals(typeStr.trim())) {
    tempPlant = new Parabush(name, nutrients);
} else if ("d".equals(typeStr.trim())) {
    tempPlant = new Deltatree(name, nutrients);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:03