方法重载的核心是通过统一方法名、不同参数列表将多源数据归一化为同一处理入口,所有重载均委托至私有核心方法确保行为一致、异常统一、扩展安全,并严格遵循面向对象封装原则避免歧义与破坏兼容性。

核心是用方法重载把不同来源的数据“归一化”为统一处理入口,再靠面向对象的设计原则保证逻辑清晰、可扩展、不破坏旧代码。
重载设计要覆盖常见数据形态
工具类对外暴露一组同名静态方法,参数类型各不相同,但语义一致——都是“传入原始数据,执行解析或处理”。例如:
- parse(File file):适配传统 IO 场景,内部转为 Path 或 InputStream
- parse(Path path):利用 NIO.2 安全读取,支持符号链接控制与权限检查
- parse(InputStream in):最底层抽象,供框架集成或流式处理使用
- parse(byte[] data):避免临时文件,适合微服务间二进制传输
- parse(String content, Charset charset):面向文本内容,省去编码转换步骤
所有重载都委托给同一核心逻辑
每个重载方法不做重复解析,而是将输入“包装”成 InputStream(或 ReadableByteChannel),再调用私有核心方法,比如 doParse(InputStream)。这样能确保:
- 行为完全一致(校验、解密、格式识别等都在一处实现)
- 异常处理统一(如空流、编码错误、结构损坏)
- 后续增强只需改一个地方(比如加超时、加缓存、加日志)
用面向对象约束重载边界,避免歧义
重载不是堆砌方法,需配合面向对象的封装和抽象来守住设计底线:
- 不提供 parse(Object obj) 这类兜底方法——它会把类型判断推到运行时,失去编译期检查
- 避免同时定义 parse(InputStream) 和 parse(ReadableByteChannel)——传 Channels.newChannel(in) 时编译器无法抉择
- 若需扩展能力(如校验开关、字符集默认值),用新增重载而非修改原签名,例如 parse(File, boolean validate)
- 对 String 类型输入明确语义:不用 parse(String),而用 parseAsString(String, Charset) 或 parseAsPath(String),防止路径字符串被误当内容
向后兼容必须作为硬约束
工具类一旦发布,已有重载方法就是契约:
- 不能删除,哪怕已标 @Deprecated——否则依赖旧 JAR 的项目运行时直接报 NoSuchMethodError
- 不能改参数类型或个数——那等于定义了新方法,旧调用全部失效
- 新增重载应复用已有流程,比如 parse(Path) 内部调用 Files.readAllBytes(p) 后走 parse(byte[]),而不是另起一套流读取逻辑
- Javadoc 必须注明各版本适用场景,例如“推荐用于 Java 8+”或“兼容 JDK 7 序列化字节流”











