コレクションキャスト
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 のコレクションには実行時に宣言される型が存在するためです。