当前位置: 首页 > article >正文

Apex 基础

概述

Apex 编程语言是一种面向对象的编程语言,它用于在 Salesforce 平台上开发自定义逻辑、自动化任务和集成。它的语法与 Java 类似,并支持面向对象的特性,如类、对象、继承、多态等。

1. 类的定义

在 Apex 中,类是对一组相关数据和方法的封装。类定义了对象的行为和状态。类可以包含字段(数据)和方法(操作)。下面是一个简单的类定义示例:

public class Car {
    // 成员变量(字段)
    public String make;
    public String model;
    public Integer year;

    // 构造函数
    public Car(String make, String model, Integer year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    // 成员方法(行为)
    public void displayInfo() {
        System.debug('Make: ' + make + ', Model: ' + model + ', Year: ' + year);
    }
}

解释:

  • public class Car:定义了一个 Car 类。
  • 成员变量:类的字段 make、model 和 year,它们描述了 Car 类的状态。
  • 构造函数:Car 类的构造函数,用于初始化类的对象。在创建对象时传入 make、model 和 year,然后赋值给对应的字段。
  • 成员方法:displayInfo 方法用来输出车的信息。

2. 创建对象

在 Apex 中,可以通过使用类的构造函数来创建对象。下面是创建 Car 类对象并调用其方法的示例:

public class CarTest {
    public static void main() {
        // 创建 Car 类的对象
        Car myCar = new Car('Tesla', 'Model S', 2021);

        // 调用对象的方法
        myCar.displayInfo();
    }
}

解释:
创建对象:使用 new Car() 创建 Car 类的对象,并传入构造函数所需的参数。
调用方法:通过 myCar.displayInfo() 调用 Car 类中的 displayInfo 方法,输出 myCar 对象的信息。

3. 类的继承

Apex 支持类的继承,可以通过继承父类来创建子类,从而复用父类的代码。下面是一个继承示例:
virtual 类:一个类被声明为 virtual 时,表示它可以被其他类继承。默认情况下,Apex 中的类是不可继承的

public virtual class Car {
    // 成员变量(字段)
    public String make;
    public String model;
    public Integer year;

    // 构造函数
    public Car(String make, String model, Integer year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    // 成员方法(行为)
    public virtual  void displayInfo() {
        System.debug('Make: ' + make + ', Model: ' + model + ', Year: ' + year);
    }
}
public class ElectricCar extends Car {
    public Integer batteryCapacity;

    // 构造函数
    public ElectricCar(String make, String model, Integer year, Integer batteryCapacity) {
        // 调用父类的构造函数
        super(make, model, year);
        this.batteryCapacity = batteryCapacity;
    }

    // 重写父类的方法
    public override  void displayInfo() {
        super.displayInfo();  // 调用父类的 displayInfo 方法
        System.debug('Battery Capacity: ' + batteryCapacity + ' kWh');
    }
}

解释:
继承:ElectricCar 类继承自 Car 类,通过 extends 关键字来实现。
构造函数:ElectricCar 类的构造函数调用了父类 Car 的构造函数(通过 super 关键字),并初始化了 batteryCapacity 字段。
方法重写:ElectricCar 重写了 displayInfo 方法,在父类方法的基础上添加了额外的功能。

4.多态

Apex 支持多态,意味着可以通过父类引用指向子类对象。下面是一个多态的示例:

public class VehicleTest {
    public static void main() {
        // 创建父类和子类的对象
        Car myCar = new Car('Toyota', 'Camry', 2020);
        ElectricCar myElectricCar = new ElectricCar('Nissan', 'Leaf', 2022, 62);

        // 创建父类引用指向子类对象
        Car myVehicle = myElectricCar;

        // 调用方法
        myVehicle.displayInfo();  // 由于多态,调用的是 ElectricCar 类中的 displayInfo 方法
    }
}

解释:
多态:Car 类型的变量 myVehicle 可以指向 ElectricCar 类的对象 myElectricCar。
方法调用:通过 myVehicle.displayInfo() 调用的是 ElectricCar 类中的 displayInfo 方法,而不是 Car 类中的方法。这是因为 myVehicle 实际上指向的是 ElectricCar 类的对象。

以上总结

类:类是数据和方法的封装,定义了对象的属性和行为。可以包含字段、构造函数和方法。
对象:对象是类的实例,通过 new 关键字创建。对象拥有类定义的属性和行为。
继承:子类可以继承父类的属性和方法,复用代码。
多态:可以使用父类类型的引用来指向子类对象,从而调用子类重写的方法。

Apex 数据类型

Apex 支持多种数据类型,下面是一些常见的基本数据类型:
基本数据类型:包括 Integer(整数)、Long(长整数)、Double(浮动小数)、String(字符串)、Boolean(布尔值)、Date(日期)、Datetime(日期时间)、Time(时间)等。
集合类型:
List:用于存储一组有序的数据,数据类型可以是任何 Apex 类型。

List<String> names = new List<String>{'Alice', 'Bob', 'Charlie'};

Set:用于存储唯一的元素,无序的。

Set<Integer> numbers = new Set<Integer>{1, 2, 3, 3};  // 重复的3只存储一次

Map:用于存储键值对的集合,类似于 Java 中的 HashMap。

Map<String, Integer> ageMap = new Map<String, Integer>{'Alice' => 25, 'Bob' => 30};

sObject:是 Salesforce 平台特有的数据类型,表示数据库中的记录(例如 Account、Contact 等)。
1.使用点符号(Dot Notation)赋值。

// 创建一个 sObject 类型的对象
Account acc = new Account();

// 通过点符号赋值
acc.Name = 'Acme Corporation';
acc.Industry = 'Technology';
acc.AnnualRevenue = 1000000.0;

// 插入记录
insert acc;

2.使用 put 方法赋值

// 创建一个 sObject 类型的对象
Account acc = new Account();

// 使用 put 方法赋值,字段名需要传入 API 名称
acc.put('Name', 'Acme Corporation');
acc.put('Industry', 'Technology');
acc.put('AnnualRevenue', 1000000.0);

// 插入记录
insert acc;

3.通过构造函数进行赋值

// 使用构造函数创建并赋值
Account acc = new Account(
    Name = 'Acme Corporation',
    Industry = 'Technology',
    AnnualRevenue = 1000000.0
);

// 插入记录
insert acc;

Apex 事务控制

DML 操作:
Apex 提供了多种 DML 语句来对数据库中的记录进行增、删、改、查等操作:

// 插入记录
insert new Account(Name = 'New Account');

// 更新记录
update acc;

// 删除记录
delete acc;

// 查询记录
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Name = 'New Account'];

事务控制:
可以通过 Database.rollback 来回滚事务,或者使用 Database.saveResult 来检查 DML 操作的结果。

Database.rollback(savepoint);

Apex 测试

Apex 具有内置的单元测试功能,测试代码必须覆盖一定比例的业务逻辑。所有的测试必须在 @isTest 注解的类中进行。
创建测试类:

@isTest
private class MyTestClass {
    @isTest
    static void testAccountInsert() {
        Account testAccount = new Account(Name = 'Test Account');
        insert testAccount;
        System.assertNotEquals(testAccount.Id, null);
    }
}

测试方法:使用 System.assert 来验证操作的正确性。

System.assertEquals(expected, actual, '错误信息');

模拟数据:使用 Test.startTest() 和 Test.stopTest() 来帮助模拟和控制测试执行时间。

Test.startTest();
// 执行操作
Test.stopTest();

Salesforce 安全性和共享规则

在 Apex 中处理数据时,要考虑数据的安全性和共享规则:

  • with sharing:表示类中的代码将遵循 Salesforce 的共享规则,限制用户对数据的访问。
  • without sharing:表示类中的代码不遵循共享规则,允许访问所有数据(通常仅在管理员角色下使用)。

http://www.kler.cn/a/535853.html

相关文章:

  • Android原生开发问题汇总
  • 从java角度对比nodejs、fastapi,同步和异步区别
  • js-对象-JSON
  • uniapp访问django目录中的图片和视频,2025[最新]中间件访问方式
  • DeepSeek-r1模型本地化部署最新教程
  • k8s常见面试题2
  • k8s常见面试题1
  • app专项测试(网络测试流程)
  • duoker安装
  • java面试上机_常见的Java上机面试题
  • echarts加载地图
  • C++11详解(三) -- 可变参数模版和lambda
  • macOs安装docker且在docker上部署nginx+php
  • ubuntu22.04源码编译mysql8.0.X详细流程【由deepseek提供】
  • spring aop失效场景
  • 本地化部署 AI 的第一步,认识和使用 ollama
  • 【DeepSeek青桔系列】Ollama 部署 DeepSeek:AI 界的“拼多多”!
  • leetcode——只出现一次的数字(java)
  • 阿里云与腾讯云 DDoS 防御价格大比拼
  • vue组件和插件的区别与联系
  • 【前端】【面试】【经典一道题】前端 Vue、React 采用单向数据流的原因
  • 基于离散浣熊优化算法(Discrete Coati Optimization Algorithm,DCOA)的骑手配送路径规划研究,MATLAB代码
  • Java 面试之结束问答
  • .net知识点4
  • 【Linux】冯诺依曼体系结构和操作系统概念理解
  • 如果$nextTick内部抛出错误,如何处理?