一. 数据类型

在Apex中,所有的变量和表达式都会有一个数据类型,那salesforce中都有哪些数据类型?

接下来主要针对以下几个内容进行介绍,其他的自行查看。

  1. 基础类型:我们可以看一下基础类型包含哪些内容以及一些介绍。
数据类型 描述 举例 参考文档
Blob 一组二进制数据的集合用来存储在一个object中,通常用于存储在一个文件或者附件中(用于作为body部分)。 String myString = 'StringToBlob';
Blob myBlob = Blob.valueof(myString);
Integer size = myBlob.size(); https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_blob.htm
Boolean 一个值仅允许赋值为 true/ false/null. Boolean skipValidation = true; https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_boolean.htm
Date 一个表示特定日期的值。与Datetime值不同,Date值不包含关于时间的信息。通过加/减一个整形数字(代表加减天数),便可以返回一个新的日期类型的值。可以通过 System.today()获取当前用户时区下的当前日期。 Date currentDate = System.today();
Date particularDate = currentDate.addDays(5);
system.debug('*** particular date: ' + particularDate);
//返回当前user时区的当天日期的5天以后的结果。 https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_date.htm
Datetime 一个表示特定日期的值,包含时间戳的信息。Datetime类型需要考虑时区问题,即本地时间以及GMT时间。举个例子:中国是GMT + 8,本地时间如果为2023年1月1日的0时,则GMT时间为2022年12月31日的16时,使用正确的时间在项目中极为重要。通过 System.now()获取GMT时区的当前时间。通过 Datetime.format()或者其他方法获取当前user本地时区的时间。 Datetime nowWithGMT = system.now();
Datetime nowWithLocal = nowWithGMT.format(); https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_datetime.htm
Decimal 一个包含小数点的数,最多32位。Currency类型的字段在apex中将会自动转换成 Decimal类型。需要注意的是:两个数值相等但比例不同的十进制对象(如1.1和1.10)通常没有相同的哈希代码。当这样的十进制对象被用在Set或者作为Map的key时,需要谨慎使用。 Decimal testVariable = 1.1;
Decimal testVariable2 = 1.10;
Set<Decimal> variableSet = new Set<Decimal>();
variableSet.add(testVariable);
system.debug(variableSet.contains(testVariable2));
//结果将会返回false,因为尽管 testVariable和testVariable2的值相等,但是因为小数点后的数量不同,哈希值会不同,所以系统不会认为相同。 https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_decimal.htm
Double 一个包含小数点的数,最多64位,范围为:-2的63次方到2的63次方减1 Double pi = 3.14159; https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_double.htm
ID 18位的系统中的数据ID,如果传递的是15位的ID,系统也会自动转换成18位ID Id currentUserId = UserInfo.getUserId();
system.debug('*** currentUserId : ' + currentUserId);
//输出当前运行user的ID https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_id.htm
Integer 32位不包含小数点的数。 Integer integerVariable = 1; https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_integer.htm
Long 64位不包含小数点的数。 Long longVariable = 1L; https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_long.htm
Object apex中支持的任意的数据类型。apex支持基础类型,用户定义的自定义的类,sobject基础类型,所有的数据类型都继承自Object Object obj = 10;
// Cast the object to an integer.
Integer i = (Integer)obj;
String 一系列的字符串用于放在单引号中 String testVariable = ‘test’; https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_string.htm
Time 一个存储指定时间的值,可以通过 Time类的 newInstance实例化,如果想要获取当前时间,也可以通过获取 Datetime以后,获取 Time信息。 Datetime nowWithGMT = system.now();
Time currentTimeWithGMT = nowWithGMT.timeGmt();
system.debug(currentTimeWithGMT);
//获取当前的GMT的日期 https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_time.htm

建议大家将基础类型的类以及方法都简单扫一遍。

  1. 集合:集合在apex开发中一定会用到,这里使用的是 List, Set以及Map。接下来对这三个进行描述。

    1. List:List代表着一个有序的集合,每个元素可以通过下标进行获取到,下标从0开始。如果想要获取到下图中的 Orange,只需要通过 xxList.get(1)方式获取,其中1代表了Orange的下标。
    Index 0 Index 1 Index 2
    'Red’ 'Orange’ 'Yellow’

    List里面的元素可以是任何的类型,比如基础类型,sObject,或者嵌入的列表等。举个例子:

    // 创建一个空的列表
    List<String> my_list = new List<String>();
    // 创建一个嵌套列表
    List<List<Set<Integer>>> my_list_2 = new List<List<Set<Integer>>>();
    // 创建一个列表并添加值
    List<Integer> myList = new List<Integer>();
    myList.add(47);
    

    更多 list的知识可以参考:https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_list.htm

    1. Set: Set代表着一个无序的集合,集合中的每个元素都是唯一的。和List相同的是, Set里面的元素也可以是任何的类型。通常使用Set进行是否包含某个元素的操作。举个例子:
    // 定义set时可以直接设置元素
    Set<String> set1 = new Set<String>{'New York', 'Paris'};
    //定义一个空的Set
    Set<Integer> mySet = new Set<Integer>();
    //添加元素
    mySet.add(10);
    //如果添加重复元素,会自动忽略,所以输出set的大小,返回的结果是1
    mySet.add(10);
    //输出结果为1,因为两次add内容相同,Set中的内容是唯一的
    System.debug(LoggingLevel.INFO, '*** mySet.size(): ' + mySet.size());
    

    更多Set的知识可以参考:https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_set.htm

    1. Map:Map存储的是一组键值对的集合,其中键的内容是唯一的,值的内容不做任何要求。通常键的内容合在一起变成了 Set,值的内容合在一起变成了 List。通常使用 Map来判断是否包含某个 Key,包含的情况下获取key对应的value信息。举个例子:
    //定义一个Map
    Map<Integer, String> m = new Map<Integer, String>();
    //添加键值对到Map中
    m.put(1, 'First entry');
    m.put(2, 'Second entry');
    String result = '';
    
    if(m.containsKey(1)) {
    	result = m.get(1);
    }
    //输出结果为 First entry
    system.debug(result);
    

    更多Map的知识可以参考:https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_map.htm

二. 集合的处理

  1. do while 以及while

do while和while的用法和java相同,用于对集合进行处理,其中 do while是先执行方法体,然后在执行while中的条件语句。while是先执行条件语句,满足条件才会执行方法体内容。

do while语法: