2

サンドボックスはWinter'13にアップグレードされていますが、本番環境はまだ古いバージョンのままです。次のコードは、サンドボックスでは「false」を出力しますが、本番環境では「true」を出力します。オンラインでこれについて言及しているようには見えませんが、動作が異なるようです。

Set<Id> x = new Set<Id>{
     '012A0000000qv2wIAA'
    ,'012A0000000qv2xIAA'
    ,'012A0000000qv2yIAA'
    ,'012A0000000qv2zIAA'
};

System.debug(x.contains('012A0000000qv2z'));

セットには18文字のIDが含まれており、15文字のIDが.contains()されているかどうかを確認していることに注意してください。私はそれが何らかの方法で機能することを気にしません。動作が異なるのは奇妙なことです。


編集:文字列をIDに明示的にキャストすると、動作が環境間で一貫するようになることに気づきました。

System.debug(x.contains((Id)('012A0000000qv2z')));

では、Apexが新しいリリースでタイププロモーションルールを変更したのではないでしょうか。

4

1 に答える 1

2

私はこれを調べました。これは、Set in Apexの新しい実装での型操作ロジックへの意図しない変更です(新しいimplはユーザー定義の型をサポートしています、やったー!)。私はバグを報告しましたが、将来のパッチでこれに対処します(いつ約束することは許可されていません)。この問題を指摘し、そのような簡潔な再現を与えてくれてありがとう。

グレッグフィー

于 2012-09-28T21:07:31.957 に答える