前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >salesforce零基础学习(九十八)Type浅谈

salesforce零基础学习(九十八)Type浅谈

作者头像
Zero-Zhang
发布2020-06-18 16:17:33
5250
发布2020-06-18 16:17:33
举报

在Salesforce的世界,凡事皆Metadata。

先通过一句经常使用的代码带入一下:

代码语言:javascript
复制
Account accountItem = (Account)JSON.deserialize(accountString,Account.class);

这种代码相信大部分开发都会写过,前台将数据序列化,通过字符串的形参传递给后台,后台将数据进行反序列化,从而获取到这个表或者这个自定义类的实例。所以问题来了,为啥第二个参数是 Account.class?我们通过官方的API描述可能更好的进行了解。

这里我们引出了 Type的概念,他是apex 预定的类型,包括 基础数据类型(Integer等) , 集合, sObject类型以及 用户定义的类。基础数据类型等等都是 object类型,所以当我们理解salesforce里面的类型时,可以简单的分成两个大类:Object & sObject。所以Type概念引入完了,它用来干嘛?怎么声明?什么时候用呢?

代码语言:javascript
复制
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类型可以转换成指定的数据类型。

代码语言:javascript
复制
Account accountItem = (Account)JSON.deserialize(accountString,Account.class);

2. 针对Custom Setting等根据配置的动态的类调用动态方法的使用

ParentClass是一个父类,有两个变量以及一个虚拟的方法,继承的子类可以进行实现

代码语言:javascript
复制
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继承了它并实现了它相关的方法

代码语言:javascript
复制
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中配置了不同的场景应该调用的不同的子类,公共方法中,我们只需要使用以下的代码来判断和调用即可。

代码语言:javascript
复制
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的使用,抛砖引玉,想要深入了解还要自行查看官方文档。篇中有错误的地方欢迎指出,有不懂的欢迎留言。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档