You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:25:24