返回 Bug 清单
BUG-0338project-47低已修复backend-logic

Map<?, ?> 通配符上 getOrDefault —— 泛型擦除掩盖的类型错误

发现:2026-10-01验证:2026-10-09置信度:85%

症状

商品卡片注入工具方法对未知 value 类型做默认值兜底,行为不可预期。

根因

通配符泛型把 value 类型擦成 unknown,getOrDefault 的默认值参数在编译期失去类型约束,运行期才暴露。

修复方案

能定泛型就定具体泛型;确实无法预知类型时用 Object 接收后 instanceof 分派,不要在通配符上使用带默认值写入语义的 API。

检测命令

grep -rn 'Map<?, ?>\|Map<?, ' --include='*.java' | grep getOrDefault

错误签名

Map<?, ?> 上调用 getOrDefault(key, <具体类型默认值>) 编译通过但语义错误

技术信息

来源项目

project-47

标签

java-generics, wildcard, type-safety