1# @arkts.utils (ArkTS工具库) 2 3本模块提供了各种ArkTS实用工具函数。 4 5> **说明:** 6> 7> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 9> 此模块仅支持在ArkTS文件(文件后缀为.ets)中导入使用。 10 11## 导入模块 12 13```ts 14import { ArkTSUtils } from '@kit.ArkTS' 15``` 16 17## ArkTSUtils.locks 18 19为了解决多并发实例间的数据竞争问题,ArkTS语言基础库引入了异步锁能力。为了开发者的开发效率,AsyncLock对象支持跨并发实例引用传递。 20 21由于ArkTS语言支持异步操作,阻塞锁容易产生死锁问题,因此我们在ArkTS中仅支持异步锁(非阻塞式锁)。 22 23使用异步锁的方法需要标记为async,调用方需要await修饰调用,才能保证时序正确。因此会导致外层调用函数全部标记成async。 24 25### AsyncLockCallback 26 27type AsyncLockCallback\<T> = () => T | Promise\<T> 28 29这是一个补充类型别名,表示[lockAsync](#lockasync)函数所有重载中的回调。 30 31**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 32 33**系统能力:** SystemCapability.Utils.Lang 34 35### AsyncLock 36 37实现异步锁功能的类,允许在锁下执行异步操作。该类使用[@Sendable装饰器](../../arkts-utils/arkts-sendable.md)装饰。 38 39#### 属性 40 41**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 42 43**系统能力:** SystemCapability.Utils.Lang 44 45| 名称 | 类型 | 可读 | 可写 | 说明 | 46| ---- | ------ | ---- | ---- | ---------- | 47| name | string | 是 | 否 | 锁的名称。 | 48 49**示例:** 50 51```ts 52// 示例一: 53@Sendable 54class A { 55 count_: number = 0; 56 async getCount(): Promise<number> { 57 let lock: ArkTSUtils.locks.AsyncLock = ArkTSUtils.locks.AsyncLock.request("lock_1"); 58 return lock.lockAsync(() => { 59 return this.count_; 60 }) 61 } 62 async setCount(count: number) { 63 let lock: ArkTSUtils.locks.AsyncLock = ArkTSUtils.locks.AsyncLock.request("lock_1"); 64 await lock.lockAsync(() => { 65 this.count_ = count; 66 }) 67 } 68} 69 70// 示例二: 71@Sendable 72class A { 73 count_: number = 0; 74 lock_: ArkTSUtils.locks.AsyncLock = new ArkTSUtils.locks.AsyncLock(); 75 async getCount(): Promise<number> { 76 return this.lock_.lockAsync(() => { 77 return this.count_; 78 }) 79 } 80 async setCount(count: number) { 81 await this.lock_.lockAsync(() => { 82 this.count_ = count; 83 }) 84 } 85} 86 87@Concurrent 88async function foo(a: A) { 89 await a.setCount(10) 90} 91``` 92 93#### constructor 94 95constructor() 96 97默认构造函数。创建一个异步锁。 98 99**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 100 101**系统能力:** SystemCapability.Utils.Lang 102 103**返回值:** 104 105| 类型 | 说明 | 106| ----------------------- | ------------------ | 107| [AsyncLock](#asynclock) | 创建的异步锁实例。 | 108 109**示例:** 110 111```ts 112let lock = new ArkTSUtils.locks.AsyncLock(); 113``` 114 115#### request 116 117static request(name: string): AsyncLock 118 119使用指定的名称查找或创建(如果未找到)异步锁实例。 120 121**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 122 123**系统能力:** SystemCapability.Utils.Lang 124 125**参数:** 126 127| 名称 | 类型 | 必填 | 说明 | 128| ---- | ------ | ---- | -------------------------------- | 129| name | string | 是 | 按指定名称查找或创建异步锁实例。 | 130 131**返回值:** 132 133| 类型 | 说明 | 134| ----------------------- | -------------------------------- | 135| [AsyncLock](#asynclock) | 返回查找到或创建后的异步锁实例。 | 136 137**示例:** 138 139```ts 140let lockName = 'isAvailableLock'; 141let lock = ArkTSUtils.locks.AsyncLock.request(lockName); 142``` 143 144#### query 145 146static query(name: string): AsyncLockState 147 148查询指定异步锁的信息。 149 150**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 151 152**系统能力:** SystemCapability.Utils.Lang 153 154**参数:** 155 156| 名称 | 类型 | 必填 | 说明 | 157| ---- | ------ | ---- | ---------- | 158| name | string | 是 | 锁的名称。 | 159 160**返回值:** 161 162| 类型 | 说明 | 163| --------------------------------- | ---------------------------------- | 164| [AsyncLockState](#asynclockstate) | 一个包含状态描述的异步锁状态实例。 | 165 166**错误码:** 167 168以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 169 170| 错误码ID | 错误信息 | 171| -------- | ------------- | 172| 401 | The input parameters are invalid. | 173| 10200030 | The lock does not exist. | 174 175**示例:** 176 177```ts 178// 你已经在别的地方创建了一个锁。 179// let lock = ArkTSUtils.locks.AsyncLock.request("queryTestLock"); 180let state = ArkTSUtils.locks.AsyncLock.query('queryTestLock'); 181if (!state) { 182 throw new Error('测试失败:期望有效的状态,但得到的是 ' + state); 183} 184let pending: ArkTSUtils.locks.AsyncLockInfo[] = state.pending; 185let held: ArkTSUtils.locks.AsyncLockInfo[] = state.held; 186``` 187 188#### queryAll 189 190static queryAll(): AsyncLockState[] 191 192查询所有现有锁的信息。 193 194**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 195 196**系统能力:** SystemCapability.Utils.Lang 197 198**返回值:** 199 200| 类型 | 说明 | 201| ----------------------------------- | -------------------------------- | 202| [AsyncLockState](#asynclockstate)[] | 包含锁状态信息的异步锁状态数组。 | 203 204**示例:** 205 206```ts 207let states: ArkTSUtils.locks.AsyncLockState[] = ArkTSUtils.locks.AsyncLock.queryAll(); 208if (states.length === 0) { 209 throw new Error('测试失败:期望至少有1个状态,但得到的是 ' + states.length); 210} 211``` 212 213#### lockAsync 214 215lockAsync\<T>(callback: AsyncLockCallback\<T>): Promise\<T> 216 217在获取的锁下执行操作。该方法首先获取锁,然后调用回调,最后释放锁。回调在调用[lockAsync](#lockasync)的同一线程中以异步方式执行。 218 219**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 220 221**系统能力:** SystemCapability.Utils.Lang 222 223**参数:** 224 225| 名称 | 类型 | 必填 | 说明 | 226| -------- | --------------------------------------- | ---- | ---------------------- | 227| callback | [AsyncLockCallback](#asynclockcallback) | 是 | 获取锁后要调用的函数。 | 228 229**返回值:** 230 231| 类型 | 说明 | 232| ----------- | --------------------------- | 233| Promise\<T> | 回调执行后将解决的Promise。 | 234 235**错误码:** 236 237以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 238 239| 错误码ID | 错误信息 | 240| -------- | ------------- | 241| 401 | The input parameters are invalid. | 242| 10200030 | The lock does not exist. | 243 244**示例:** 245 246```ts 247let lock = new ArkTSUtils.locks.AsyncLock(); 248let p1 = lock.lockAsync<void>(() => { 249 // 执行某些操作 250}); 251``` 252 253#### lockAsync 254 255lockAsync\<T>(callback: AsyncLockCallback\<T>, mode: AsyncLockMode): Promise\<T> 256 257在获取的锁下执行操作。该方法首先获取锁,然后调用回调,最后释放锁。回调在调用[lockAsync](#lockasync)的同一线程中以异步方式执行。 258 259**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 260 261**系统能力:** SystemCapability.Utils.Lang 262 263**参数:** 264 265| 名称 | 类型 | 必填 | 说明 | 266| -------- | --------------------------------------- | ---- | ---------------------- | 267| callback | [AsyncLockCallback](#asynclockcallback) | 是 | 获取锁后要调用的函数。 | 268| mode | [AsyncLockMode](#asynclockmode) | 是 | 锁的操作模式。 | 269 270**返回值:** 271 272| 类型 | 说明 | 273| ----------- | --------------------------- | 274| Promise\<T> | 回调执行后将解决的Promise。 | 275 276**错误码:** 277 278以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 279 280| 错误码ID | 错误信息 | 281| -------- | ------------- | 282| 401 | The input parameters are invalid. | 283| 10200030 | The lock does not exist. | 284 285**示例:** 286 287```ts 288let lock = new ArkTSUtils.locks.AsyncLock(); 289let p1 = lock.lockAsync<void>(() => { 290 // 执行某些操作 291}, ArkTSUtils.locks.AsyncLockMode.EXCLUSIVE); 292``` 293 294#### lockAsync 295 296lockAsync\<T, U>(callback: AsyncLockCallback\<T>, mode: AsyncLockMode, options: AsyncLockOptions\<U>): Promise\<T | U> 297 298在获取的锁下执行操作。该方法首先获取锁,然后调用回调,最后释放锁。回调在调用[lockAsync](#lockasync)的同一线程中以异步方式执行。在[AsyncLockOptions](#asynclockoptions)中可以提供一个可选的超时值。在这种情况下,如果超时前未能获取锁,lockAsync将拒绝返回的Promise并带上一个BusinessError实例。这种情况下,错误信息将包含持有的锁和等待的锁的信息以及可能的死锁警告。 299 300**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 301 302**系统能力:** SystemCapability.Utils.Lang 303 304**参数:** 305 306| 名称 | 类型 | 必填 | 说明 | 307| -------- | ----------------------------------------- | ---- | ---------------------- | 308| callback | [AsyncLockCallback](#asynclockcallback) | 是 | 获取锁后要调用的函数。 | 309| mode | [AsyncLockMode](#asynclockmode) | 是 | 锁的操作模式。 | 310| options | [AsyncLockOptions\<U>](#asynclockoptions) | 是 | 锁的操作选项。 | 311 312**返回值:** 313 314| 类型 | 说明 | 315| ---------------- | -------------------------------------------------- | 316| Promise\<T \| U> | 回调执行后解决的Promise,或者在超时情况下被拒绝。 | 317 318**错误码:** 319 320以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 321 322| 错误码ID | 错误信息 | 323| -------- | ----------------- | 324| 401 | The input parameters are invalid. | 325| 10200030 | The lock does not exist. | 326| 10200031 | Timeout exceeded. | 327 328**示例:** 329 330```ts 331let lock = new ArkTSUtils.locks.AsyncLock(); 332let options = new ArkTSUtils.locks.AsyncLockOptions<void>(); 333options.timeout = 1000; 334let p: Promise<void> = lock.lockAsync<void, void>( 335 () => { 336 // 执行某些操作 337 }, 338 ArkTSUtils.locks.AsyncLockMode.EXCLUSIVE, 339 options 340); 341``` 342 343### AsyncLockMode 344 345锁操作对应的模式枚举。 346 347**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 348 349**系统能力:** SystemCapability.Utils.Lang 350 351| 名称 | 值 | 说明 | 352| --------- | --- | -------------------------------------------------------- | 353| SHARED | 1 | 共享锁模式。如果指定了此模式,可以在任意线程同时执行。 | 354| EXCLUSIVE | 2 | 独占锁模式。如果指定了此模式,仅在独占获取锁时才能执行。 | 355 356**示例:** 357 358```ts 359let lock = new ArkTSUtils.locks.AsyncLock(); 360// shared0可获取锁并开始执行 361lock.lockAsync(async () => { 362 console.info('shared0'); 363 await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 364}, ArkTSUtils.locks.AsyncLockMode.SHARED); 365// shared1可获取锁并开始执行,无需等待shared0 366lock.lockAsync(async () => { 367 console.info('shared1'); 368 await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 369}, ArkTSUtils.locks.AsyncLockMode.SHARED); 370// exclusive0需等待shared0、1执行完后才可获取锁并执行 371lock.lockAsync(async () => { 372 console.info('exclusive0'); 373 await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 374}, ArkTSUtils.locks.AsyncLockMode.EXCLUSIVE); 375// shared2需等待exclusive0执行完后才可获取锁并执行 376lock.lockAsync(async () => { 377 console.info('shared2'); 378 await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 379}, ArkTSUtils.locks.AsyncLockMode.SHARED); 380// shared3需等待exclusive0执行完后才可获取锁并执行,无需等待shared2 381lock.lockAsync(async () => { 382 console.info('shared3'); 383 await new Promise<void>((resolve) => setTimeout(resolve, 1000)); 384}, ArkTSUtils.locks.AsyncLockMode.SHARED); 385``` 386 387### AsyncLockOptions 388 389class AsyncLockOptions\<T> 390 391表示锁操作选项的类。 392 393**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 394 395**系统能力:** SystemCapability.Utils.Lang 396 397#### constructor 398 399constructor() 400 401默认构造函数。创建一个所有属性均具有默认值的异步锁配置项实例。 402 403**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 404 405**系统能力:** SystemCapability.Utils.Lang 406 407**返回值:** 408 409| 类型 | 说明 | 410| ------------------------------------- | ---------------------- | 411| [AsyncLockOptions](#asynclockoptions) | 新的异步锁配置项实例。 | 412 413**示例:** 414 415```ts 416let s: ArkTSUtils.locks.AbortSignal<string> = { aborted: false, reason: 'Aborted' }; 417let options = new ArkTSUtils.locks.AsyncLockOptions<string>(); 418options.isAvailable = false; 419options.signal = s; 420``` 421 422#### 属性 423 424| 名称 | 类型 | 可读 | 可写 | 说明 | 425| ----------- | ------------------------------------- | ---- | ---- | ------------------------------------------------------------------------------------------------------------------------- | 426| isAvailable | boolean | 是 | 是 | 当前锁是否可用。取值为true,则只有在尚未持有锁定请求时才会授予该锁定请求;为false则表示将等待当前锁被释放。默认为 false。 | 427| signal | [AbortSignal\<T>](#abortsignal)\|null | 是 | 是 | 用于中止异步操作的对象。当signal.aborted为true时,锁请求将被丢弃;当signal.aborted为false时,请求会继续等待获取锁;当signal为null时,请求正常排队运行。默认为 null。 | 428| timeout | number | 是 | 是 | 锁操作的超时时间(毫秒)。如果该值大于零,且运行超过该时间,[lockAsync](#lockasync)将返回被拒绝的Promise。默认为 0。 | 429 430### AsyncLockState 431 432用于存储特定异步锁实例上当前执行的所有锁操作的信息的类。 433 434**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 435 436**系统能力:** SystemCapability.Utils.Lang 437 438#### 属性 439 440| 名称 | 类型 | 可读 | 可写 | 说明 | 441| ------- | --------------------------------- | ---- | ---- | ---------------- | 442| held | [AsyncLockInfo[]](#asynclockinfo) | 是 | 是 | 持有的锁信息。 | 443| pending | [AsyncLockInfo[]](#asynclockinfo) | 是 | 是 | 等待中的锁信息。 | 444 445### AsyncLockInfo 446 447关于锁的信息。 448 449**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 450 451**系统能力:** SystemCapability.Utils.Lang 452 453#### 属性 454 455| 名称 | 类型 | 可读 | 可写 | 说明 | 456| --------- | ------------------------------- | ---- | ---- | --------------------------------------------------------- | 457| name | string | 是 | 是 | 锁的名称。 | 458| mode | [AsyncLockMode](#asynclockmode) | 是 | 是 | 锁的模式。 | 459| contextId | number | 是 | 是 | [AsyncLockMode](#asynclockmode)调用者的执行上下文标识符。 | 460 461### AbortSignal 462 463用于中止异步操作的对象。该类的实例必须在其创建的同一线程中访问。从其他线程访问此类的字段会导致未定义的行为。 464 465**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 466 467**系统能力:** SystemCapability.Utils.Lang 468 469#### 属性 470 471| 名称 | 类型 | 可读 | 可写 | 说明 | 472| ------- | ------- | ---- | ---- | ---------------------------------------------------------------- | 473| aborted | boolean | 是 | 是 | 是否终止异步操作。为true时表示中止异步操作,为false时表示异步操作未被中止。 | 474| reason | \<T> | 是 | 是 | 中止的原因。此值将用于拒绝[lockAsync](#lockasync)返回的Promise。 | 475 476### ConditionVariable<sup>18+</sup> 477 478实现异步等待功能的类,允许执行异步等待通知操作。 479 480**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 481 482**系统能力:** SystemCapability.Utils.Lang 483 484#### constructor<sup>18+</sup> 485 486constructor() 487 488默认构造函数。创建一个异步等待通知操作的对象。 489 490**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 491 492**系统能力:** SystemCapability.Utils.Lang 493 494**示例:** 495 496```ts 497let conditionVariable = new ArkTSUtils.locks.ConditionVariable(); 498``` 499 500#### request<sup>18+</sup> 501 502static request(name: string): ConditionVariable 503 504使用指定的名称查找或创建(如果未找到)异步等待通知操作的对象。 505 506**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 507 508**系统能力:** SystemCapability.Utils.Lang 509 510**参数:** 511 512| 名称 | 类型 | 必填 | 说明 | 513| ---- | ------ | ---- | -------------------------------- | 514| name | string | 是 | 按指定名称查找或创建等待通知操作的对象名称,字符串无特别限制。 | 515 516**返回值:** 517 518| 类型 | 说明 | 519| ----------------------- | -------------------------------- | 520| [ConditionVariable](#conditionvariable18) | 返回查找到或创建后的异步等待通知操作的实例。 | 521 522**示例:** 523 524```ts 525let conditionVariable = ArkTSUtils.locks.ConditionVariable.request("conditionName"); 526``` 527 528#### wait<sup>18+</sup> 529 530wait(): Promise\<void> 531 532异步调用进入等待中,将在被唤醒后继续执行。使用Promise异步回调。 533 534**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 535 536**系统能力:** SystemCapability.Utils.Lang 537 538**返回值:** 539 540| 类型 | 说明 | 541| ----------- | --------------------------- | 542| Promise\<void> | 无返回结果的Promise对象。 | 543 544**示例:** 545 546```ts 547let conditionVariable = ArkTSUtils.locks.AsyncLock.ConditionVariable(); 548conditionVariable.wait().then(() => { 549 console.info(`Thread being awakened, then continue...`); //被唤醒后输出日志 550}); 551``` 552 553#### waitFor<sup>18+</sup> 554 555waitFor(timeout : number) : Promise\<void> 556 557异步调用进入等待中, 将在被唤醒或者等待时间结束后继续执行。使用Promise异步回调。 558 559**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 560 561**系统能力:** SystemCapability.Utils.Lang 562 563**参数:** 564 565| 名称 | 类型 | 必填 | 说明 | 566| -------- | -------- | ---- | ---------- | 567| timeout | number | 是 | 等待时间,单位为ms,正整数。 | 568 569**返回值:** 570 571| 类型 | 说明 | 572| ----------- | --------------------------- | 573| Promise\<void> | 无返回结果的Promise对象。 | 574 575**示例:** 576 577```ts 578let conditionVariable = ArkTSUtils.locks.AsyncLock.ConditionVariable(); 579conditionVariable.waitFor(3000).then(() => { 580 console.info(`Thread being awakened, then continue...`); //被唤醒后输出日志 581}); 582``` 583 584#### notifyAll<sup>18+</sup> 585 586notifyAll() : void 587 588通知所有等待的线程。 589 590**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 591 592**系统能力:** SystemCapability.Utils.Lang 593 594**示例:** 595 596```ts 597let conditionVariable = ArkTSUtils.locks.AsyncLock.ConditionVariable(); 598conditionVariable.waitFor(3000).then(() => { 599 console.info(`Thread being awakened, then continue...`); //被唤醒后输出日志 600}); 601conditionVariable.notifyAll(); 602``` 603 604#### notifyOne<sup>18+</sup> 605 606notifyOne() : void 607 608通知第一个等待的线程。 609 610**原子化服务API**:从API version 18 开始,该接口支持在原子化服务中使用。 611 612**系统能力:** SystemCapability.Utils.Lang 613 614**示例:** 615 616```ts 617let conditionVariable = ArkTSUtils.locks.AsyncLock.ConditionVariable(); 618conditionVariable.waitFor(3000).then(() => { 619 console.info(`Thread a being awakened, then continue...`); //被唤醒后输出日志 620}); 621conditionVariable.waitFor().then(() => { 622 console.info(`Thread twob being awakened, then continue...`); //被唤醒后输出日志 623}); 624conditionVariable.notifyOne(); 625``` 626 627## ArkTSUtils.ASON 628 629为支持将JSON字符串解析成共享数据,即[Sendable支持的数据类型](../../arkts-utils/arkts-sendable.md#sendable支持的数据类型),ArkTS语言基础库新增了ASON工具。ASON支持开发者解析JSON字符串,并生成共享数据进行跨并发域传输,同时ASON也支持将共享数据转换成JSON字符串。 630 631### ISendable 632 633type ISendable = lang.ISendable 634 635ISendable是所有Sendable类型(除`null`和`undefined`)的父类型。自身没有任何必须的方法和属性。 636 637**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 638 639**系统能力:** SystemCapability.Utils.Lang 640 641| 类型 | 说明 | 642| ------ | ------ | 643| [lang.ISendable](js-apis-arkts-lang.md#langisendable) | 所有Sendable类型的父类型。 | 644 645### Transformer 646 647type Transformer = (this: ISendable, key: string, value: ISendable | undefined | null) => ISendable | undefined | null 648 649用于转换结果函数的类型。 650 651**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 652 653**系统能力:** SystemCapability.Utils.Lang 654 655**参数:** 656 657| 参数名 | 类型 | 必填 | 说明 | 658| ------ | ------ | ---- | --------------- | 659| this | [ISendable](#isendable) | 是 | 在解析的键值对所属的对象。| 660| key | string | 是 | 属性名。| 661| value | [ISendable](#isendable) | 是 | 在解析的键值对的值。| 662 663**返回值:** 664 665| 类型 | 说明 | 666| -------- | -------- | 667| [ISendable](#isendable) \| undefined \| null | 返回转换结果后的ISendable对象或undefined或null。| 668 669### BigIntMode 670 671定义处理BigInt的模式。 672 673**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 674 675**系统能力:** SystemCapability.Utils.Lang 676 677| 名称 | 值| 说明 | 678| ------ | ------ | --------------- | 679| DEFAULT | 0 |不支持BigInt。| 680| PARSE_AS_BIGINT | 1 |当整数小于-(2^53-1)或大于(2^53-1)时,解析为BigInt。| 681| ALWAYS_PARSE_AS_BIGINT | 2 |所有整数都解析为BigInt。| 682 683### ParseReturnType 684 685定义解析结果的返回类型。 686 687**系统能力:** SystemCapability.Utils.Lang 688 689| 名称 | 值| 说明 | 690| ------ | ------ | --------------- | 691| OBJECT | 0 |返回 SendableObject 对象。<br>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 692| MAP<sup>13+</sup> | 1 |返回 SendableMap 对象。<br>**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。| 693 694### ParseOptions 695 696解析的选项,可定义处理BigInt的模式与解析结果的返回类型。 697 698**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 699 700**系统能力:** SystemCapability.Utils.Lang 701 702| 名称 | 类型| 必填 | 说明 | 703| ------ | ------ | ---- | --------------- | 704| bigIntMode | [BigIntMode](#bigintmode) | 是 |定义处理BigInt的模式。| 705| parseReturnType | [ParseReturnType](#parsereturntype) | 是 |定义解析结果的返回类型。| 706 707### parse 708 709parse(text: string, reviver?: Transformer, options?: ParseOptions): ISendable | null 710 711用于解析JSON字符串生成ISendable数据或null。 712 713**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 714 715**系统能力:** SystemCapability.Utils.Lang 716 717**参数:** 718 719| 参数名 | 类型 | 必填 | 说明 | 720| ------ | ------ | ---- | --------------- | 721| text | string | 是 | 有效的JSON字符串。| 722| reviver | [Transformer](#transformer) | 否 | 转换函数,传入该参数,可以用来修改解析生成的原始值。默认值是undefined。目前只支持传入undefined。| 723| options | [ParseOptions](#parseoptions) | 否 | 解析的配置,传入该参数,可以用来控制解析生成的结果类型。默认值是undefined。| 724 725**返回值:** 726 727| 类型 | 说明 | 728| -------- | -------- | 729| [ISendable](#isendable) \| null | 返回ISendable数据或null。当入参是null时,返回null。| 730 731**示例:** 732 733```ts 734import { lang } from '@kit.ArkTS'; 735import { collections } from '@kit.ArkTS'; 736 737type ISendable = lang.ISendable; 738let jsonText = '{"name": "John", "age": 30, "city": "ChongQing"}'; 739let obj = ArkTSUtils.ASON.parse(jsonText) as ISendable; 740console.info((obj as object)?.["name"]); 741// 期望输出: 'John' 742console.info((obj as object)?.["age"]); 743// 期望输出: 30 744console.info((obj as object)?.["city"]); 745// 期望输出: 'ChongQing' 746 747let options: ArkTSUtils.ASON.ParseOptions = { 748 bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT, 749 parseReturnType: ArkTSUtils.ASON.ParseReturnType.OBJECT, 750} 751let numberText = '{"largeNumber":112233445566778899}'; 752let numberObj = ArkTSUtils.ASON.parse(numberText,undefined,options) as ISendable; 753 754console.info((numberObj as object)?.["largeNumber"]); 755// 期望输出: 112233445566778899 756 757let options2: ArkTSUtils.ASON.ParseOptions = { 758 bigIntMode: ArkTSUtils.ASON.BigIntMode.PARSE_AS_BIGINT, 759 parseReturnType: ArkTSUtils.ASON.ParseReturnType.MAP, 760 } 761let mapText = '{"largeNumber":112233445566778899}'; 762let map = ArkTSUtils.ASON.parse(mapText,undefined,options2); 763console.info("map is " + map); 764// 期望输出: map is [object SendableMap] 765console.info("largeNumber is " + (map as collections.Map<string,bigint>).get("largeNumber")); 766// 期望输出: largeNumber is 112233445566778899 767``` 768 769### stringify 770 771stringify(value: ISendable | null | undefined): string 772 773该方法将ISendable数据转换为JSON字符串。 774 775**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 776 777**系统能力:** SystemCapability.Utils.Lang 778 779**参数:** 780 781| 参数名 | 类型 | 必填 | 说明 | 782| -------- | -------- | -------- | -------- | 783| value | [ISendable](#isendable) \| null \| undefined | 是 | ISendable数据。| 784 785**返回值:** 786 787| 类型 | 说明 | 788| -------- | -------- | 789| string | 转换后的JSON字符串。| 790 791**示例:** 792 793```ts 794import { collections } from '@kit.ArkTS'; 795 796let arr = new collections.Array(1, 2, 3); 797let str = ArkTSUtils.ASON.stringify(arr); 798console.info(str); 799// 期望输出: '[1,2,3]' 800``` 801 802### stringify<sup>18+</sup> 803 804stringify(value: Object | null | undefined): string 805 806该方法将ArkTS对象数据转换为JSON字符串,额外支持Map和Set相关类型。 807 808**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 809 810**系统能力:** SystemCapability.Utils.Lang 811 812**参数:** 813 814| 参数名 | 类型 | 必填 | 说明 | 815| -------- | -------- | -------- | -------- | 816| value | Object \| null \| undefined | 是 | ArkTS对象数据。| 817 818**返回值:** 819 820| 类型 | 说明 | 821| -------- | -------- | 822| string | 转换后的JSON字符串。| 823 824**示例:** 825 826```ts 827import { ArkTSUtils, collections, HashMap, HashSet } from '@kit.ArkTS'; 828 829let hashMap = new HashMap<string,string>(); 830hashMap.set("ha","a"); 831hashMap.set("sh","b"); 832hashMap.set("map","c"); 833let str1 = ArkTSUtils.ASON.stringify(hashMap); 834console.info(str1); 835//期望输出:'{"sh":"b","ha":"a","map":"c"}' 836let hashSet = new HashSet<string>(); 837hashSet.add("ha"); 838hashSet.add("sh"); 839hashSet.add("set"); 840let str2 = ArkTSUtils.ASON.stringify(hashSet); 841console.info(str2); 842//期望输出:'["set","sh","ha"]' 843let map = new Map<string,string>(); 844map.set("m","a"); 845map.set("a","b"); 846map.set("p","c"); 847let str3 = ArkTSUtils.ASON.stringify(map); 848console.info(str3); 849//期望输出:'{"m":"a","a":"b","p":"c"}' 850let set = new Set<string>(); 851set.add("s"); 852set.add("e"); 853set.add("t"); 854let str4 = ArkTSUtils.ASON.stringify(set); 855console.info(str4); 856//期望输出:'["s","e","t"]' 857let sendableMap = new collections.Map<string,string>(); 858sendableMap.set("send","a"); 859sendableMap.set("able","b"); 860sendableMap.set("map","c"); 861let str5 = ArkTSUtils.ASON.stringify(sendableMap); 862console.info(str5); 863//期望输出:'{"send":"a","able":"b","map":"c"}' 864let sendableSet = new collections.Set<string>(); 865sendableSet.add("send"); 866sendableSet.add("able"); 867sendableSet.add("set"); 868let str6 = ArkTSUtils.ASON.stringify(sendableSet); 869console.info(str6); 870//期望输出:'["send","able","set"]' 871``` 872 873### isSendable 874 875isSendable(value: Object | null | undefined): boolean 876 877该方法用于判断value是否为Sendable数据类型。 878 879**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 880 881**系统能力:** SystemCapability.Utils.Lang 882 883**参数:** 884 885| 参数名 | 类型 | 必填 | 说明 | 886| -------- | -------- | -------- | -------- | 887| value | Object \| null \| undefined | 是 | 待校验的对象。| 888 889**返回值:** 890 891| 类型 | 说明 | 892| -------- | -------- | 893| boolean | value是否为Sendable数据类型,true表示value是Sendable数据类型,否则为false。| 894 895**示例:** 896 897```ts 898import { ArkTSUtils } from '@kit.ArkTS' 899 900@Sendable 901function sendableFunc() { 902 console.info("sendableFunc") 903} 904 905if (ArkTSUtils.isSendable(sendableFunc)) { 906 console.info("sendableFunc is Sendable"); 907} else { 908 console.info("sendableFunc is not Sendable"); 909} 910// 期望输出: 'SendableFunc is Sendable' 911``` 912 913## SendableLruCache<K, V><sup>18+</sup> 914 915SendableLruCache用于在缓存空间不够的时候,将近期最少使用的数据替换为新数据。此设计基于资源访问的考虑:近期访问的数据,可能在不久的将来会再次访问。于是最少访问的数据就是价值最小的数据,是最应该踢出缓存空间的数据。 SendableLruCache支持Sendable特性,保存Sendable对象,可以跨线程安全访问。 916 917### 属性 918 919**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 920 921**系统能力:** SystemCapability.Utils.Lang 922 923| 名称 | 类型 | 可读 | 可写 | 说明 | 924| ------ | ------ | ---- | ---- | ---------------------- | 925| length | number | 是 | 否 | 当前缓冲区中值的总数。 | 926 927**示例:** 928 929```ts 930let pro = new ArkTSUtils.SendableLruCache<number, number>(); 931pro.put(2, 10); 932pro.put(1, 8); 933let result = pro.length; 934console.info('result = ' + result); 935// 期望输出:result = 2 936``` 937 938### constructor<sup>18+</sup> 939 940constructor(capacity?: number) 941 942默认构造函数用于创建一个新的SendableLruCache实例,默认容量为64。 943 944**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 945 946**系统能力:** SystemCapability.Utils.Lang 947 948**参数:** 949 950| 参数名 | 类型 | 必填 | 说明 | 951| -------- | ------ | ---- | ---------------------------- | 952| capacity | number | 否 | 指示要为缓冲区自定义的容量,不传默认值为64,最大值不能超过2147483647。 | 953 954**示例:** 955 956```ts 957let pro = new ArkTSUtils.SendableLruCache<number, number>(); 958``` 959 960### updateCapacity<sup>18+</sup> 961 962updateCapacity(newCapacity: number): void 963 964将缓冲区容量更新为指定容量。当缓冲区中值的总数大于指定容量时,会执行删除操作,删除最少使用的键值对。 965 966**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 967 968**系统能力:** SystemCapability.Utils.Lang 969 970**参数:** 971 972| 参数名 | 类型 | 必填 | 说明 | 973| ----------- | ------ | ---- | ---------------------------- | 974| newCapacity | number | 是 | 指示要为缓冲区自定义的容量,最大值不能超过2147483647;小于等于0时会抛出异常。| 975 976**错误码:** 977 978以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 979 980| 错误码ID | 错误信息 | 981| -------- | ------------------------------------------| 982| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified;2.Incorrect parameter types. | 983 984**示例:** 985 986```ts 987let pro = new ArkTSUtils.SendableLruCache<number, number>(); 988pro.updateCapacity(100); 989``` 990 991### toString<sup>18+</sup> 992 993toString(): string 994 995返回对象的字符串表示形式。 996 997**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 998 999**系统能力:** SystemCapability.Utils.Lang 1000 1001**返回值:** 1002 1003| 类型 | 说明 | 1004| ------ | -------------------------- | 1005| string | 返回对象的字符串表示形式。 返回字符串格式是:SendableLruCache[ maxSize = (maxSize), hits = (hitCount), misses = (missCount), hitRate = (hitRate) ]。 (maxSize)表示缓存区最大值,(hitCount)表示查询值匹配成功的次数,(missCount)表示查询值匹配失败的次数,(hitRate)表示查询值匹配率。| 1006 1007**示例:** 1008 1009```ts 1010let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1011pro.put(2, 10); 1012pro.get(2); 1013pro.get(3); 1014console.info(pro.toString()); 1015// 预期输出:SendableLruCache[ maxSize = 64, hits = 1, misses = 1, hitRate = 50% ] 1016// maxSize: 缓存区最大值 hits: 查询值匹配成功的次数 misses: 查询值匹配失败的次数 hitRate: 查询值匹配率 1017``` 1018 1019### getCapacity<sup>18+</sup> 1020 1021getCapacity(): number 1022 1023获取当前缓冲区的容量。 1024 1025**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1026 1027**系统能力:** SystemCapability.Utils.Lang 1028 1029**返回值:** 1030 1031| 类型 | 说明 | 1032| ------ | ---------------------- | 1033| number | 返回当前缓冲区的容量。 | 1034 1035**示例:** 1036 1037```ts 1038let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1039let result = pro.getCapacity(); 1040console.info('result = ' + result); 1041// 预期输出:result = 64 1042``` 1043 1044### clear<sup>18+</sup> 1045 1046clear(): void 1047 1048从当前缓冲区清除所有键值对。 1049 1050**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1051 1052**系统能力:** SystemCapability.Utils.Lang 1053 1054**示例:** 1055 1056```ts 1057let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1058pro.put(2, 10); 1059let result = pro.length; 1060pro.clear(); 1061let res = pro.length; 1062console.info('result = ' + result); 1063console.info('res = ' + res); 1064// 预期输出:result = 1 1065// 预期输出:res = 0 1066``` 1067 1068### getCreateCount<sup>18+</sup> 1069 1070getCreateCount(): number 1071 1072获取调用createDefault接口创建对象的次数。 1073 1074**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1075 1076**系统能力:** SystemCapability.Utils.Lang 1077 1078**返回值:** 1079 1080| 类型 | 说明 | 1081| ------ | -------------------| 1082| number | 返回使用createDefault接口创建对象的次数。 | 1083 1084**示例:** 1085 1086```ts 1087@Sendable 1088class ChildLRUCache extends ArkTSUtils.SendableLruCache<number, number> { 1089 constructor() { 1090 super(); 1091 } 1092 createDefault(key: number): number { 1093 return key; 1094 } 1095} 1096 1097let lru = new ChildLRUCache(); 1098lru.put(2, 10); 1099lru.get(3); 1100lru.get(5); 1101let res = lru.getCreateCount(); 1102console.info('res = ' + res); 1103// 预期输出:res = 2 1104// 执行get操作时,如果键值不存在,调用createDefault接口判断返回值是否等于undefined 1105// 如果不等于,则需要把key和返回值作为键值对添加到cache中,并且创建次数加1 1106``` 1107 1108### getMissCount<sup>18+</sup> 1109 1110getMissCount(): number 1111 1112获取查询值不匹配的次数。 1113 1114**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1115 1116**系统能力:** SystemCapability.Utils.Lang 1117 1118**返回值:** 1119 1120| 类型 | 说明 | 1121| ------ | ------------------------ | 1122| number | 返回查询值不匹配的次数。 | 1123 1124**示例:** 1125 1126```ts 1127let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1128pro.put(2, 10); 1129pro.get(2); 1130let result = pro.getMissCount(); 1131console.info('result = ' + result); 1132// 预期输出:result = 0 1133``` 1134 1135### getRemoveCount<sup>18+</sup> 1136 1137getRemoveCount(): number 1138 1139获取缓冲区键值对回收的次数,当缓冲区数超过容量限制后,最少使用的键值对会被回收。 1140 1141**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1142 1143**系统能力:** SystemCapability.Utils.Lang 1144 1145**返回值:** 1146 1147| 类型 | 说明 | 1148| ------ | -------------------------- | 1149| number | 返回缓冲区键值对回收的次数。 | 1150 1151**示例:** 1152 1153```ts 1154let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1155pro.put(2, 10); 1156pro.updateCapacity(2); 1157pro.put(50, 22); 1158let result = pro.getRemoveCount(); 1159console.info('result = ' + result); 1160// 预期输出:result = 0 1161``` 1162 1163### getMatchCount<sup>18+</sup> 1164 1165getMatchCount(): number 1166 1167获取查询值匹配成功的次数。 1168 1169**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1170 1171**系统能力:** SystemCapability.Utils.Lang 1172 1173**返回值:** 1174 1175| 类型 | 说明 | 1176| ------ | -------------------------- | 1177| number | 返回查询值匹配成功的次数。 | 1178 1179**示例:** 1180 1181```ts 1182let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1183pro.put(2, 10); 1184pro.get(2); 1185let result = pro.getMatchCount(); 1186console.info('result = ' + result); 1187// 预期输出:result = 1 1188``` 1189 1190### getPutCount<sup>18+</sup> 1191 1192getPutCount(): number 1193 1194获取将值添加到缓冲区的次数。 1195 1196**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1197 1198**系统能力:** SystemCapability.Utils.Lang 1199 1200**返回值:** 1201 1202| 类型 | 说明 | 1203| ------ | ---------------------------- | 1204| number | 返回将值添加到缓冲区的次数。 | 1205 1206**示例:** 1207 1208```ts 1209let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1210pro.put(2, 10); 1211let result = pro.getPutCount(); 1212console.info('result = ' + result); 1213// 预期输出:result = 1 1214``` 1215 1216### isEmpty<sup>18+</sup> 1217 1218isEmpty(): boolean 1219 1220检查当前缓冲区是否为空。 1221 1222**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1223 1224**系统能力:** SystemCapability.Utils.Lang 1225 1226**返回值:** 1227 1228| 类型 | 说明 | 1229| ------- | ---------------------------------------- | 1230| boolean | 返回true表示当前缓冲区为空不包含任何键值对;返回false表示当前缓冲区不为空。 | 1231 1232**示例:** 1233 1234```ts 1235let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1236pro.put(2, 10); 1237let result = pro.isEmpty(); 1238console.info('result = ' + result); 1239// 预期输出:result = false 1240``` 1241 1242### get<sup>18+</sup> 1243 1244get(key: K): V | undefined 1245 1246返回键对应的值。 1247 1248**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1249 1250**系统能力:** SystemCapability.Utils.Lang 1251 1252**参数:** 1253 1254| 参数名 | 类型 | 必填 | 说明 | 1255| ------ | ---- | ---- | ------------ | 1256| key | K | 是 | 要查询的键。 | 1257 1258**返回值:** 1259 1260| 类型 | 说明 | 1261| ------------------------ | ------------------------------------------------------------ | 1262| V \| undefined | 如果指定的键存在于缓冲区中,则返回与键关联的值;否则调用createDefault接口,如果返回值为undefined,则返回undefined,否则返回createDefault接口结果。 | 1263 1264**示例:** 1265 1266```ts 1267let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1268pro.put(2, 10); 1269let result = pro.get(2); 1270console.info('result = ' + result); 1271// 预期输出:result = 10 1272``` 1273 1274### put<sup>18+</sup> 1275 1276put(key: K,value: V): V 1277 1278将键值对添加到缓冲区中,返回与添加的键关联的值。当缓冲区中值的总数大于容量时,会执行删除操作。 1279 1280**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1281 1282**系统能力:** SystemCapability.Utils.Lang 1283 1284**参数:** 1285 1286| 参数名 | 类型 | 必填 | 说明 | 1287| ------ | ---- | ---- | -------------------------- | 1288| key | K | 是 | 要添加的键。 | 1289| value | V | 是 | 指示与要添加的键关联的值。 | 1290 1291**返回值:** 1292 1293| 类型 | 说明 | 1294| ---- | ------------------------------------------------------------ | 1295| V | 返回与添加的键关联的值。如果键或值为空,则抛出错误ID为401的参数错误异常。 | 1296 1297**示例:** 1298 1299```ts 1300let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1301let result = pro.put(2, 10); 1302console.info('result = ' + result); 1303// 预期输出:result = 10 1304``` 1305 1306### values<sup>18+</sup> 1307 1308values(): V[] 1309 1310获取当前缓冲区中所有值从最近访问到最少访问的顺序列表,最近访问表示有最新操作的键值对。 1311 1312**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1313 1314**系统能力:** SystemCapability.Utils.Lang 1315 1316**返回值:** 1317 1318| 类型 | 说明 | 1319| --------- | ------------------------------------------------------------ | 1320| V [] | 按从最近访问到最少访问的顺序返回当前缓冲区中所有值的列表。 | 1321 1322**示例:** 1323 1324```ts 1325let pro = new ArkTSUtils.SendableLruCache<number|string,number|string>(); 1326pro.put(2, 10); 1327pro.put(2, "anhu"); 1328pro.put("afaf", "grfb"); 1329let result = pro.values(); 1330console.info('result = ' + result); 1331// 预期输出:result = anhu,grfb 1332``` 1333 1334### keys<sup>18+</sup> 1335 1336keys(): K[] 1337 1338获取当前缓冲区中所有键从最近访问到最近最少访问的升序列表。 1339 1340**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1341 1342**系统能力:** SystemCapability.Utils.Lang 1343 1344**返回值:** 1345 1346| 类型 | 说明 | 1347| --------- | ------------------------------------------------------------ | 1348| K [] | 按升序返回当前缓冲区中所有键的列表,从最近访问到最近最少访问。 | 1349 1350**示例:** 1351 1352```ts 1353let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1354pro.put(2, 10); 1355pro.put(3, 1); 1356let result = pro.keys(); 1357console.info('result = ' + result); 1358// 预期输出:result = 2,3 1359``` 1360 1361### remove<sup>18+</sup> 1362 1363remove(key: K): V | undefined 1364 1365从当前缓冲区中删除指定的键及其关联的值,返回键关联的值。如果键不存在时,则返回undefined。 1366 1367**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1368 1369**系统能力:** SystemCapability.Utils.Lang 1370 1371**参数:** 1372 1373| 参数名 | 类型 | 必填 | 说明 | 1374| ------ | ---- | ---- | -------------- | 1375| key | K | 是 | 要删除的键值。 | 1376 1377**返回值:** 1378 1379| 类型 | 说明 | 1380| ------------------------ | ------------------------------------------------------------ | 1381| V \| undefined | 返回一个包含已删除键值对的Optional对象;如果key不存在,则返回undefined,如果key为null,则抛出异常。 | 1382 1383**示例:** 1384 1385```ts 1386let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1387pro.put(2, 10); 1388let result = pro.remove(20); 1389console.info('result = ' + result); 1390// 预期输出:result = undefined 1391``` 1392 1393### contains<sup>18+</sup> 1394 1395contains(key: K): boolean 1396 1397检查当前缓冲区是否包含指定的键,假如存在,返回true,否则返回false。 1398 1399**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1400 1401**系统能力:** SystemCapability.Utils.Lang 1402 1403**参数:** 1404 1405| 参数名 | 类型 | 必填 | 说明 | 1406| ------ | ------ | ---- | ---------------- | 1407| key | K | 是 | 表示要检查的键。 | 1408 1409**返回值:** 1410 1411| 类型 | 说明 | 1412| ------- | ------------------------------------------ | 1413| boolean | 如果缓冲区包含指定的键,则返回true,否则返回false。 | 1414 1415**示例:** 1416 1417```ts 1418let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1419pro.put(2, 10); 1420let result = pro.contains(2); 1421console.info('result = ' + result); 1422// 预期输出:result = true 1423``` 1424 1425### entries<sup>18+</sup> 1426 1427entries(): IterableIterator<[K,V]> 1428 1429允许迭代包含在这个对象中的所有键值对。 1430 1431**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 1432 1433**系统能力:** SystemCapability.Utils.Lang 1434 1435**返回值:** 1436 1437| 类型 | 说明 | 1438| ----------- | -------------------- | 1439| IterableIterator<[K, V]> | 返回一个可迭代数组。 | 1440 1441**示例:** 1442 1443```ts 1444let pro = new ArkTSUtils.SendableLruCache<number, number>(); 1445pro.put(2, 10); 1446pro.put(3, 15); 1447let pair:Iterable<Object[]> = pro.entries(); 1448let arrayValue = Array.from(pair); 1449for (let value of arrayValue) { 1450 console.info(value[0]+ ', '+ value[1]); 1451 // 预期输出: 1452 // 2, 10 1453 // 3, 15 1454} 1455```