JD.CAST.UPCAST

当使用类型 A 的运算符实例检查对象,然后将对象转换为类型 B(其中类型 B 是类型 A 的子类型)时,触发 JD.CAST.UPCAST。

漏洞与风险

这通常是一种错误,因为转换不安全;对象实际上可以是 A 的其他子类型。在某些情况下,当从 instanceof 到转换的路径不兼容时,这种错误会产生误报。

示例 1

复制
     void setValue(Object a, Object value) {
         if (a instanceof Map) {
             HashMap b = (HashMap) a;
             b.put(value, "");
         } else if (a instanceof List) {
             List b = (List) a;
             b.add(value);
         }
     }

JD.CAST.UPCAST:怀疑“a”转换为了“HashMap”,其中“HashMap”是“Map”的子类型。该对象可以保留 Map 的其他子类型,这会导致 ClassCastException。-> 15:a instanceof Map-> 16:(HashMap)a