视频:『阿男的Java
泛型讲座』*16*Collections的运行时类型安全检查 (视频稍后补充)
通过定义type(比如List<String>),Java可以在编译时给出有效的warning,但是type checking并不能阻止运行时的
错误应用,比如下面这段代码:
编译器会给出warning,实际上这个warning如果不处理,直接会导致runtime exception:
所以我们得到的教训是:编译器进行类型检查报告的warning可能会导致runtime exception,因此要仔细分析代码。此外,Java在Collections类当中添加了很好用的checkedList方法:
这个方法会把一个类型不安全的
集合类(collections)包装起来,返回一个类型安全的view,其类型为这个方法的type参数。这个方法返回的view类型是CheckedList。下面是相关的类图:
CheckedList的特点是会在运行时检查添加的元素类型是否符合要求,否则抛出
异常。我们可以看到CheckedList的增删改查方法当中包含typeCheck:
接下来我们写一段代码使用Collections提供的这个强大功能:
我们首先声明了一个raw type list叫做typeUnsafeList,然后我们通过Collections.checkedList(typeUnsafeList, String.
class)把它封装成String类型的List叫做stringList,最后我们试着往stringList里面添加一个不合要求的int数值。代码运行结果如下:
这样我们在List的*数值插入阶段*就检查到了类型错误,而不是在后续的数据使用过程中才抛出class cast exception。
- 大小: 349 KB
- 大小: 344.9 KB
- 大小: 1.4 MB
- 大小: 301.7 KB
- 大小: 357.8 KB
- 大小: 456.4 KB
- 大小: 449.4 KB
- 大小: 534.6 KB