この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

コレクションキャスト

Apex のコレクションには実行時に宣言される型が存在するため、Apex ではコレクションキャストを許可しています。

コレクションは、Java で配列をキャストするのと似た方法でキャストされます。たとえば、CustomerPurchaseOrder クラスが PurchaseOrder クラスの子である場合、CustomerPurchaseOrder オブジェクトのリストを PurchaseOrder オブジェクトのリストに割り当てることができます。

1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public virtual class PurchaseOrder {
18
19    Public class CustomerPurchaseOrder extends PurchaseOrder {
20
21    }
22    {
23        List<PurchaseOrder> POs = new PurchaseOrder[] {};
24        List<CustomerPurchaseOrder> CPOs = new CustomerPurchaseOrder[]{};
25        POs = CPOs;}
26    }

CustomerPurchaseOrder リストが PurchaseOrder リスト変数に割り当てられると、そのインスタンスが最初は CustomerPurchaseOrder のリストとしてインスタンス化されるため、CustomerPurchaseOrder オブジェクトのリストに再度キャストすることができます。このようにインスタンス化された PurchaseOrder オブジェクトのリストは、PurchaseOrder オブジェクトのリストに CustomerPurchaseOrder オブジェクトのみが含まれている場合でも、CustomerPurchaseOrder オブジェクトのリストにキャストできません。

CustomerPurchaseOrders オブジェクトのみを含む PurchaseOrder リストのユーザが PurchaseOrder の非 CustomerPurchaseOrder サブクラス (InternalPurchaseOrder など) を挿入しようとすると、実行時例外が発生します。これは、Apex のコレクションには実行時に宣言される型が存在するためです。

対応付けは対応付けの値側に関してリストと同じ方法で動作します。対応付け A の値側を対応付け B の値側にキャストし、これらの対応付けが同じキータイプである場合、対応付け A を対応付け B にキャストできます。実行時に特定の対応付けでキャスティングが無効な場合は、ランタイムエラーとなります。

メモ