跳到主要内容

有界宽容原则

返回文档导航


"有界宽容原则"是 JSONMap 和 ValUtil 的核心设计思想:在宽容与严格之间划定明确边界。

三大规则

1. 缺失容忍(Lenient on Missing)

路径不存在、值为 null 或空字符串时返回 null 或默认值,不抛异常:

JSONMap data = new JSONMap("{\"user\":{\"name\":\"张三\"}}");

data.getStr("user.age"); // → null(路径不存在)
data.getStr("user.age", "未知"); // → "未知"(使用默认值)
ValUtil.toInt(null); // → null
ValUtil.toInt("", 0); // → 0

2. 类型容忍(Lenient on Type)

类型不同但内容可以转换时,自动转换:

ValUtil.toInt("123"); // String → 123
ValUtil.toInt(123L); // Long → 123
ValUtil.toDouble("99.9"); // String → 99.9
ValUtil.toBoolean("true"); // String → true
ValUtil.toBoolean(1); // Integer → true

3. 内容不容忍(Strict on Content)

内容本身无法转换时,立即抛出异常(快速失败):

ValUtil.toInt("abc"); // → NumberFormatException
ValUtil.toInt("xyz"); // → NumberFormatException
ValUtil.toDouble("hello"); // → NumberFormatException

规则总结

情况分类行为
路径不存在缺失容忍返回 null 或默认值
值为 null / 空字符串缺失容忍返回 null 或默认值
类型不同但能转换类型容忍自动转换
内容无法转换内容不容忍抛出异常

设计理由

缺失容忍:API 数据可能缺少字段、前端可能不传某些参数,直接返回 null 减少样板代码。

类型容忍:前端传参类型不可控("123" 或 123),自动转换让代码更健壮。

内容不容忍:错误数据应尽早暴露。ValUtil.toInt("abc") 立即抛异常,避免错误数据传播到数据库或业务逻辑。


上一节:自动类型纠正 | 返回文档导航 | 下一节:性能优化技巧 →