EN JP CN

JD.CAST.COL

JD.CAST.COL

JD.CAST.COL は、型 B としてコレクションに配置されたオブジェクトがコレクション (マップまたはリスト) から取得され、型 A と型 B は無関係であるにもかかわらず、即座に型 A に変換される場合に検出されます。すなわち、Klocwork は、A が B の派生型であることや、B が A の派生型であることを調べることができません。JD.CAST.COL チェッカーは、クラス フィールドのみをチェックします。

脆弱性とリスク

コレクション内のオブジェクトの型が異なるため、通常、これは、ClassCastException の原因となります。

軽減と防止

実際に使用する型 (A または B) を選択し、型 A のオブジェクトを配置するか、型 B のオブジェクトを取得してください。別の選択肢として、オブジェクトを型変換する前にこれらの型の両方が instanceof のチェックを使用可能にするという方法もあります。

例 1

10 public class JD_CAST_COL_Sample_1 {
11     HashMap test;
12     void foo(){
13         test.put("a","b");
14         JD_CAST_COL_Sample_1 res =(JD_CAST_COL_Sample_1)test.get("a");
15     }
16 }

JD.CAST.COL が 14 行目に対して報告されています。コレクション要素の 'com.klocwork.jdefects.checkers.ast.samples.JD_CAST_COL_Sample_1' への疑わしい型変換です。オブジェクトは、'java.lang.String' としてコレクションに配置されています。-> 13:test.put(a, b)-> 14:(JD_CAST_COL_Sample_1)test.get(a)

関連チェッカー