在Salesforce的世界,凡事皆Metadata。ide
先經過一句常常使用的代碼帶入一下:this
Account accountItem = (Account)JSON.deserialize(accountString,Account.class);
這種代碼相信大部分開發都會寫過,前臺將數據序列化,經過字符串的形參傳遞給後臺,後臺將數據進行反序列化,從而獲取到這個表或者這個自定義類的實例。因此問題來了,爲啥第二個參數是 Account.class?咱們經過官方的API描述可能更好的進行了解。spa
這裏咱們引出了 Type的概念,他是apex 預約的類型,包括 基礎數據類型(Integer等) , 集合, sObject類型以及 用戶定義的類。基礎數據類型等等都是 object類型,因此當咱們理解salesforce裏面的類型時,能夠簡單的分紅兩個大類:Object & sObject。因此Type概念引入完了,它用來幹嗎?怎麼聲明?何時用呢?debug
Type t1 = Integer.class; Type t2 = Type.forName('Integer'); system.debug(t1.equals(t2));
上面的簡單的demo中提供了兩種聲明Type的方式,一種是根據 object | sObject使用 .class聲明,另一種是使用 Type的方法forName來實例化變量。既然變量能夠聲明出來,咱們就能夠看看他的方法考慮如何搞事情了。code
Type的方法很是少,因此咱們想要查看其對應的方法描述以及使用很容易就看完。這裏針對幾個重要的方法進行描述:對象
基礎信息介紹完畢,此篇淺入淺出,介紹兩種可能用到的場景。blog
1. JSON序列化與反序列化繼承
這個咱們常常使用,一筆帶過:經過字符串以及指定的 Type類型能夠轉換成指定的數據類型。開發
Account accountItem = (Account)JSON.deserialize(accountString,Account.class);
2. 針對Custom Setting等根據配置的動態的類調用動態方法的使用文檔
ParentClass是一個父類,有兩個變量以及一個虛擬的方法,繼承的子類能夠進行實現
public abstract class ParentClass { public String param1 { get; set; } public String param2 { get; set; } public ParentClass() { this.param1 = 'value1'; this.param2 = 'value2'; } public virtual String joinParam() { return param1 + param2; } }
SonClass1繼承了它並實現了它相關的方法
public class SonClass1 extends ParentClass { public SonClass1() { super(); this.param1 = 'son value1'; this.param2 = 'son value2'; } public override String joinParam() { return super.joinParam(); } }
還有其餘的SonClassn繼承了它並實現了它的相關的方法,咱們在custom setting中配置了不一樣的場景應該調用的不一樣的子類,公共方法中,咱們只須要使用如下的代碼來判斷和調用便可。
public String executeJoin(String className) { Type t = Type.forName(className); Type t2 = Type.forName('ParentClass'); if(!t2.isAssignableFrom(t)) { throw new CustomException('should be son class of ParentClass'); } ParentClass newObj = (ParentClass)t.newInstance(); return newObj.joinParam(); }
總結:篇中簡單的介紹了salesforce中的 Type的使用,拋磚引玉,想要深刻了解還要自行查看官方文檔。篇中有錯誤的地方歡迎指出,有不懂的歡迎留言。