Apex:继承虚拟类的触发器处理类调用静态方法报错求解
问题解决方法
错误根源
Trigger上下文变量Trigger.New的编译时类型是List<SObject>,Trigger.oldMap的编译时类型是Map<Id, SObject>,但你定义的handleExWorksCalculations方法参数要求是List<OrderItem>和Map<Id,OrderItem>,二者类型不匹配,导致编译报错。同时你的代码存在语法错误:类定义后多了一个闭合大括号,导致beforeInsert方法不在类作用域内。
两种可行修复方案
方案1:调整方法参数为SObject兼容类型
修改方法签名以适配Trigger变量的原生类型,在方法内部再转型为OrderItem:
public with sharing class OrderItemTriggerHandler extends TriggerHandler { public override void beforeInsert() { handleExWorksCalculations(Trigger.New, Trigger.oldMap, true); } public static void handleExWorksCalculations(List<SObject> orderItemsList, Map<Id,SObject> oldOrderItemsMap, Boolean isInsert) { // 内部转型为具体的OrderItem类型 List<OrderItem> items = (List<OrderItem>)orderItemsList; Map<Id,OrderItem> oldItems = (Map<Id,OrderItem>)oldOrderItemsMap; // 后续业务逻辑 } }
方案2:调用方法时强转Trigger变量
保持方法签名不变,在调用时将Trigger变量强转为OrderItem对应的集合类型:
public with sharing class OrderItemTriggerHandler extends TriggerHandler { public override void beforeInsert() { handleExWorksCalculations((List<OrderItem>)Trigger.New, (Map<Id,OrderItem>)Trigger.oldMap, true); } public static void handleExWorksCalculations(List<OrderItem> orderItemsList, Map<Id,OrderItem> oldOrderItemsMap, Boolean isInsert) { // 后续业务逻辑 } }
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

