内联函数是什么
内联函数是把一个简单到多余的函数收回调用处:当函数体比函数名更清楚,或者函数只剩一层转发时,内联能消除不必要的间接层。它与提取函数互为逆操作,也常用来清场——先把层层包装拆掉,再重新做合理的划分。
基本信息
| 适用场景 | 函数体比名字更清晰、纯委托、提炼过度 |
|---|---|
| 反向操作 | 提取函数 |
| 步骤 | 找到全部调用点,替换为函数体,删除定义 |
| 工具支持 | IDE 的内联重构可一并处理多态分派 |
| 前置条件 | 有测试覆盖或能快速回滚 |
典型使用场景
- 只有一行返回的包装函数,名字没带来额外信息
- 名字与实现完全重复的辅助方法
- 过度提炼产生的一串碎函数调用链
- 重构前清场:先内联中间层,再重新组织职责
- 多态方法只有一处调用且没有子类覆写
内联前后
内联前后
// 内联前:函数名没有增加信息,还多一层跳转
double basePrice() {
return moreThan100() ? base * 0.95 : base;
}
boolean moreThan100() {
return base > 100;
}
// 内联后:条件直接写在用到的地方
double basePrice() {
return base > 100 ? base * 0.95 : base;
}什么时候内联
| 情况 | 建议 | 理由 |
|---|---|---|
| 函数体比名字更清楚 | 内联 | 名字没提供额外信息 |
| 只剩一层转发 | 内联 | 调用链变短,调试更直接 |
| 薄函数被测试替换使用 | 先确认再动 | 内联可能破坏测试钩子 |
手工内联多态方法容易漏掉子类覆写带来的动态分派差异;涉及多态时优先用 IDE 的重构功能,它会把分派语义一起处理。
内联会同时改变代码组织与测试钩子:确认没有测试依赖那个薄函数作为替换点,否则重构会连带弄坏测试。
内联后先跑测试再提交,并确认没有调用点残留(编译器与引用查找都能发现);函数被删掉时,同步清理只针对它的单元测试与文档示例。