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:表示类中的代码不遵循共享规则,允许访问所有数据(通常仅在管理员角色下使用)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964779.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Math Reference Notes: 符号函数

1. 符号函数的定义 符号函数&#xff08;Sign Function&#xff09; sgn ( x ) \text{sgn}(x) sgn(x) 是一个将实数 ( x ) 映射为其 符号值&#xff08;即正数、负数或零&#xff09;的函数。 它的定义如下&#xff1a; sgn ( x ) { 1 如果 x > 0 0 如果 x 0 − 1 如…

手写MVVM框架-构建虚拟dom树

MVVM的核心之一就是虚拟dom树&#xff0c;我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称&#xff08;英文大写&#xff09;ele, // 对应真实节点children,…

STM32单片机学习记录(2.2)

一、STM32 13.1 - PWR简介 1. PWR&#xff08;Power Control&#xff09;电源控制 &#xff08;1&#xff09;PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能&#xff1b; &#xff08;2&#xff09;可编程电压监测器&#xff08;…

ASUS/华硕天选5锐龙版 FA507U 原厂Win11 22H2 专业版系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;带一键恢复&#xff0c;以及机器所有的驱动和软件。 支持型号&#xff1a;FA507UU FA507UI FA507UV 系统版本&#xff1a;Windows 11 22H2 文件下载&#xff1a;asusoem.cn/920.html 文件格式&#xff…

React图标库: 使用React Icons实现定制化图标效果

React图标库: 使用React Icons实现定制化图标效果 图标库介绍 是一个专门为React应用设计的图标库&#xff0c;它包含了丰富的图标集合&#xff0c;覆盖了常用的图标类型&#xff0c;如FontAwesome、Material Design等。React Icons可以让开发者在React应用中轻松地添加、定制各…

【C++篇】哈希表

目录 一&#xff0c;哈希概念 1.1&#xff0c;直接定址法 1.2&#xff0c;哈希冲突 1.3&#xff0c;负载因子 二&#xff0c;哈希函数 2.1&#xff0c;除法散列法 /除留余数法 2.2&#xff0c;乘法散列法 2.3&#xff0c;全域散列法 三&#xff0c;处理哈希冲突 3.1&…

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…

MacBook Pro(M1芯片)DeepSeek R1 本地大模型环境搭建

MacBook Pro&#xff08;M1芯片&#xff09;DeepSeek R1 本地大模型环境搭建 这一阵子deepseek真的是太火了&#xff0c;这不&#xff0c;R1出来后更是掀起AI的狂欢&#xff0c;作为一个AI的外行人&#xff0c;也是忍不住想要拿过来感受一番&#xff5e;&#xff5e; 主要呢&…

数据结构:队列篇

图均为手绘,代码基于vs2022实现 系列文章目录 数据结构初探: 顺序表 数据结构初探:链表之单链表篇 数据结构初探:链表之双向链表篇 链表特别篇:链表经典算法问题 数据结构:栈篇 文章目录 系列文章目录前言一.队列的概念和结构1.1概念一、动态内存管理优势二、操作效率与安全性…

Python的那些事第十二篇:从入门到“不撞南墙不回头”Python 文件操作与异常处理

Python 文件操作与异常处理&#xff1a;从入门到“不撞南墙不回头” 目录 Python 文件操作与异常处理&#xff1a;从入门到“不撞南墙不回头” 一、引言 二、Python 文件操作 三、Python 异常处理 四、综合实例&#xff1a;学生成绩管理系统 五、总结与展望 一、引言 1.…

论文解读:《基于TinyML毫米波雷达的座舱检测、定位与分类》

摘要 本文提出了一种实时的座舱检测、定位和分类解决方案&#xff0c;采用毫米波&#xff08;mmWave&#xff09;雷达系统芯片&#xff08;SoC&#xff09;&#xff0c;CapterahCAL60S344-AE&#xff0c;支持微型机器学习&#xff08;TinyML&#xff09;。提出了波束距离-多普勒…

【B站保姆级视频教程:Jetson配置YOLOv11环境(七)Ultralytics YOLOv11配置】

Jetson配置YOLOv11环境&#xff08;7&#xff09;Ultralytics YOLOv11环境配置 文章目录 1. 下载YOLOv11 github项目2. 安装ultralytics包3. 验证ultralytics安装3.1 下载yolo11n.pt权重文件3.2 推理 1. 下载YOLOv11 github项目 创建一个目录&#xff0c;用于存放YOLOv11的项目…

代码讲解系列-CV(二)——卷积神经网络

文章目录 一、系列大纲二、卷积神经网络&#xff08;图像分类为例&#xff09;2.1 pytorch简介训练框架张量自动微分动态计算图更深入学习 2.2 数据输入和增强Dataset—— torch.utils.data.DatasetDataLoader——torch.utils.data.Dataloader数据增强 2.3 CNN设计与训练nn.Mod…

YK人工智能(六)——万字长文学会基于Torch模型网络可视化

1. 可视化网络结构 随着深度神经网络做的的发展&#xff0c;网络的结构越来越复杂&#xff0c;我们也很难确定每一层的输入结构&#xff0c;输出结构以及参数等信息&#xff0c;这样导致我们很难在短时间内完成debug。因此掌握一个可以用来可视化网络结构的工具是十分有必要的…

堆的基本概念

1.1 堆的基本概念 虚拟机所在目录 E:\ctf\pwn-self 进入虚拟机的pwndocker环境 holyeyesubuntu:~$ pwd /home/holyeyes holyeyesubuntu:~$ sudo ./1run.sh IDA分析 int __fastcall main(int argc, const char **argv, const char **envp) { void *v4; // [rsp20h] [rbp-1…

RabbitMQ深度探索:前置知识

消息中间件&#xff1a; 消息中间件基于队列模式实现异步 / 同步传输数据作用&#xff1a;可以实现支撑高并发、异步解耦、流量削峰、降低耦合 传统的 HTTP 请求存在的缺点&#xff1a; HTTP 请求基于响应的模型&#xff0c;在高并发的情况下&#xff0c;客户端发送大量的请求…

JDK9新特性

文章目录 新特性&#xff1a;1.模块化系统使用模块化module-info.java&#xff1a;exports&#xff1a;opens&#xff1a;requires&#xff1a;provides&#xff1a;uses&#xff1a; 2.JShell启动Jshell执行计算定义变量定义方法定义类帮助命令查看定义的变量&#xff1a;/var…

合宙air001使用命令行烧写固件

起因&#xff1a; 做了个小板子给同事使用&#xff0c;但同事没有air001的arduino编译烧录环境&#xff0c;安装的话&#xff0c;对于没有接触过arduino的人有些复杂&#xff0c;所以想着能不能直接烧录编译好的固件&#xff1b; 经过&#xff1a; 在网上搜索相关教程&#…

manimgl安装

一、环境 笔记本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy二、安装miniconda3 manimgl基于python开发&#xff0c;为了防止将笔记本中已有的python环境破坏&#xff0c;因此…

Python aiortc API

本研究的主要目的是基于Python aiortc api实现抓取本地设备&#xff08;摄像机、麦克风&#xff09;媒体流实现Web端预览。本文章仅仅描述实现思路&#xff0c;索要源码请私信我。 demo-server解耦 原始代码解析 http服务器端 import argparse import asyncio import json…