Ben*_*n S 4 java security collections raw-types
我目前正在审查大型Java EE应用程序中各种警告的安全隐患.由于大多数代码已有几年的历史,因此它包含了原始集合类型的许多用法:
List items = new List();
Run Code Online (Sandbox Code Playgroud)
而不是参数化的集合类型:
List<Item> items = new List<Item>();
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一安全含义是在编译时不能对原始类型进行静态类型检查,并且可能导致运行时错误,例如ClassCastException,根据代码中的位置,这可能会导致拒绝服务.
使用我没想过的原始类型还有其他含义吗?
我想不出任何其他安全隐患.
对于非安全性含义,泛型类型还在返回泛型的类型的字节码中执行显式转换*.当然,这对用户是透明的,并且看起来返回的类型是泛型类型.
例如:
List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically
Run Code Online (Sandbox Code Playgroud)
*这是由于类型擦除而发生的.