コレクションキャスト
Apex のコレクションには実行時に宣言される型が存在するため、Apex ではコレクションキャストを許可しています。
コレクションは、Java で配列をキャストするのと似た方法でキャストされます。たとえば、CustomerPurchaseOrder クラスが PurchaseOrder クラスの子である場合、CustomerPurchaseOrder オブジェクトのリストを PurchaseOrder オブジェクトのリストに割り当てることができます。
1public virtual class PurchaseOrder {
2
3 Public class CustomerPurchaseOrder extends PurchaseOrder {
4
5 }
6 {
7 List<PurchaseOrder> POs = new PurchaseOrder[] {};
8 List<CustomerPurchaseOrder> CPOs = new CustomerPurchaseOrder[]{};
9 POs = CPOs;
10 }
11}CustomerPurchaseOrder リストが PurchaseOrder リスト変数に割り当てられると、そのインスタンスが最初は CustomerPurchaseOrder オブジェクトのリストとしてインスタンス化されるため、CustomerPurchaseOrder オブジェクトのリストに再度キャストすることができます。このようにインスタンス化された PurchaseOrder オブジェクトのリストは、PurchaseOrder オブジェクトのリストに CustomerPurchaseOrder オブジェクトのみが含まれている場合でも、CustomerPurchaseOrder オブジェクトのリストにキャストできません。
CustomerPurchaseOrders オブジェクトのみを含む PurchaseOrder リストのユーザが PurchaseOrder の非 CustomerPurchaseOrder サブクラス (InternalPurchaseOrder など) を挿入しようとすると、実行時例外が発生します。これは、Apex のコレクションには実行時に宣言される型が存在するためです。