salesforce零基礎學習(九十八)Type淺談

在Salesforce的世界,凡事皆Metadata。

先通過一句經常使用的代碼帶入一下:

Account accountItem = (Account)JSON.deserialize(accountString,Account.class);

這種代碼相信大部分開發都會寫過,前台將數據序列化,通過字符串的形參傳遞給後台,後台將數據進行反序列化,從而獲取到這個表或者這個自定義類的實例。所以問題來了,為啥第二個參數是 Account.class?我們通過官方的API描述可能更好的進行了解。

 這裏我們引出了 Type的概念,他是apex 預定的類型,包括 基礎數據類型(Integer等) , 集合, sObject類型以及 用戶定義的類。基礎數據類型等等都是 object類型,所以當我們理解salesforce裏面的類型時,可以簡單的分成兩個大類:Object & sObject。所以Type概念引入完了,它用來幹嘛?怎麼聲明?什麼時候用呢?

Type t1 = Integer.class;
Type t2 = Type.forName('Integer');
system.debug(t1.equals(t2));

上面的簡單的demo中提供了兩種聲明Type的方式,一種是根據 object | sObject使用 .class聲明,另外一種是使用 Type的方法forName來實例化變量。既然變量可以聲明出來,我們就可以看看他的方法考慮如何搞事情了。

 Type的方法非常少,所以我們想要查看其對應的方法描述以及使用很容易就看完。這裏針對幾個重要的方法進行描述:

  • forName(fullyQualifiedName):返回與指定的完全限定的類名相對應的類型。這裏的類名包括salesforce系統預製的類,自定義的類以及sObject名稱;
  • isAssignableFrom(sourceType):如果object指定類型的引用可以從子類型分配,則返回true,否則返回false。這個方法我們可能首先會先想到 instanceof,因為都是來判斷類型是否相兼容匹配,但是 instanceof必須是初始化這個類或者對象的變量,才能使用 instanceof 來進行判斷,使用 此方法可以省去了靜態編譯時的依賴,所以如果想判斷依賴性,可以優先考慮此方法。
  • newInstance():此方法用來實例化一個指定Type的對象,返回類型是一個object對象,我們可以強制轉換成我們需要的對象類型。因為apex也是面向對象的語言,封裝,繼承,多態三大特性,我們可以通過 newInstance實現父子類型的輕鬆轉換調用相關的方法從而實現動態配置。

基礎信息介紹完畢,此篇淺入淺出,介紹兩種可能用到的場景。

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的使用,拋磚引玉,想要深入了解還要自行查看官方文檔。篇中有錯誤的地方歡迎指出,有不懂的歡迎留言。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

FB行銷專家,教你從零開始的技巧

您可能也會喜歡…