我们可以在 Salesforce(apex) 中动态投射 SObject 吗?

Posted

技术标签:

【中文标题】我们可以在 Salesforce(apex) 中动态投射 SObject 吗?【英文标题】:Can we Cast SObject dynamically in Salesforce(apex)? 【发布时间】:2014-11-03 20:41:53 【问题描述】:

是否可以动态转换 SObject?

例子:

我知道我们可以做到:

(Account) Sobject

但我想这样做,因为 sObject 的返回类型会根据某些参数而变化。

(Dynamically Passing the Name) SObject

任何方式都会有所帮助...在此先感谢:)

【问题讨论】:

我相信简短的回答是否定的,因为您仍然必须将其分配给强类型变量。 不是直接转换,但你可以使用 Type 类来玩一些扩展? salesforce.com/us/developer/docs/apexcode/Content/… Type 类只允许您基于类型实例化一个新类。它不允许您重铸已实例化的对象。 这里和你的问题类似-salesforce.stackexchange.com/questions/89087/…,也许对你有帮助 【参考方案1】:

很遗憾,没有。我最近在编写 TestFactory 类时遇到了这个问题。我能做的最好的事情就是将响应转换回调用 TestFactory 方法的代码中的预期类型。

【讨论】:

【参考方案2】:

是的,你可以做到。例如 -

Class ABC 

   public static List<Object> method1(String sObjectType)
      List<Object> records = new List<Object>();
      if(sObjectType == 'Account')
          records = [SELECT Id, Name FROM Account];
       else if(sObjectType == 'Account')
          records = [SELECT Id, Name FROM Contact];
      
      return records;
   


可以查看List的sObject类型——

if(records instanceof List<Account>)
  // your code here
 else if(records instanceof List<Contact>)
  // your code here

【讨论】:

使用相当新的“switch”语句也可以解决部分问题。

以上是关于我们可以在 Salesforce(apex) 中动态投射 SObject 吗?的主要内容,如果未能解决你的问题,请参考以下文章

salesforce 零基础学习(六十一)apex:component简单使用以及图片轮转播放的实现

如何使用lightning发送上传的文件到Apex:fileUpload - Salesforce lightning

如何使用 Apex 在 SalesForce 中以编程方式访问报告

Salesforce基础 - Apex常量

APEX 中的 Salesforce UserInfo 会话类型

如何在 Salesforce 中重命名我的 Apex 类名称