应使用 illegalargumentexception 抛出异常,明确在 getstrategy() 中判空后立即抛出,消息需含非法输入值及有效范围,配合枚举校验提前防御,不建议自定义异常或误用其他 runtimeexception 子类。

当策略模式中找不到匹配的策略实现时,用 throw new IllegalArgumentException() 是一种清晰、规范的错误处理方式,能快速暴露设计或调用问题。
明确抛出位置:在策略获取逻辑中
通常在策略上下文(Context)或策略工厂(StrategyFactory)中根据类型/编码查找具体策略。若查不到,应立即抛出异常,避免后续空指针或静默失败。
- 不要等到策略执行时才检查——那已进入业务逻辑,错误定位更难
- 推荐在
getStrategy(type)方法末尾判断返回值是否为null,再抛异常 - 示例:throw new IllegalArgumentException("Unsupported strategy type: " + type);
提供可读的异常消息
消息要包含关键上下文,帮助开发者快速定位问题源头。
- 至少包含:非法的输入值(如枚举名、字符串标识)、期望的有效范围(可选)
- 避免笼统写法:"Invalid strategy" ❌
- 推荐写法:"Unknown payment method: 'WECHAT_PAY', supported: [ALIPAY, UNIONPAY, APPLE_PAY]" ✅
配合枚举或常量校验提前防御
如果策略类型来自用户输入(如 API 参数),建议先做合法性校验,再进入策略分发流程。
- 例如:接收字符串
method,先尝试转换为PaymentMethod枚举 - 若枚举解析失败(
IllegalArgumentException或NullPointerException),直接抛出带上下文的消息 - 这样可统一拦截非法输入,避免策略层重复判空
不建议用 RuntimeException 子类替代
IllegalArgumentException 本身已是 RuntimeException,语义准确且无需强制 try-catch,符合策略匹配失败属于编程错误的定位。
- 不用自定义异常包装——除非需额外字段(如错误码),否则增加复杂度
- 避免使用
IllegalStateException或UnsupportedOperationException——它们语义不符 - 调用方应通过单元测试覆盖非法输入,而非靠运行时捕获来兜底
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











