Java中ScheduledFeeContext无法赋值为ICalculationContext的解决方法
问题根因
该编译错误是Java强类型校验的正常表现:声明为ICalculationContext类型的变量,只能接收实现了ICalculationContext接口的类实例,当前ScheduledFeeContext类和ICalculationContext接口没有实现关系,类型不匹配,因此编译不通过。
修复方法
不需要修改现有ICalculationContext接口的定义,只需要让ScheduledFeeContext类实现ICalculationContext接口即可,代码修改如下:
// 给ScheduledFeeContext加上接口实现声明 @Data @Builder public class ScheduledFeeContext implements ICalculationContext { // 类内部原有字段保持不变即可 private ProductConfig productConfig; // 替换为你实际的productConfig对应类型 private UUID agreementId; }
修改完成后,ScheduledFeeContext的实例就属于ICalculationContext的子类型,可以直接赋值给ICalculationContext类型的变量,编译错误直接消除。
额外校验点
- 注意区分
ScheduledContext和ScheduledFeeContext两个类:前者是交易上下文中获取的原始上下文,继承BaseContext;后者是计算层构建的专用上下文,需要实现ICalculationContext,两者不要混淆继承关系。 - 如果后续还有其他场景的计算上下文(比如实时计费上下文、退费计算上下文),都统一实现
ICalculationContext接口,即可复用统一的上下文传参逻辑,符合面向接口编程的设计要求。 - 示例代码中
if (1 == 1)是恒成立的测试判断,正式上线前需要替换为实际的业务分支判断逻辑,避免逻辑永远进入该分支。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

