『阿男的Java泛型讲座』*16*Collections的运行时类型安全检查_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 『阿男的Java泛型讲座』*16*Collections的运行时类型安全检查

『阿男的Java泛型讲座』*16*Collections的运行时类型安全检查

 2016/6/23 5:33:17  阿男bluedash  程序员俱乐部  我要评论(0)
  • 摘要:视频:『阿男的Java泛型讲座』*16*Collections的运行时类型安全检查(视频稍后补充)通过定义type(比如List<String>),Java可以在编译时给出有效的warning,但是typechecking并不能阻止运行时的错误应用,比如下面这段代码:编译器会给出warning,实际上这个warning如果不处理,直接会导致runtimeexception:所以我们得到的教训是:编译器进行类型检查报告的warning可能会导致runtimeexception
  • 标签:运行 Java 泛型
视频:『阿男的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
  • 查看图片附件
发表评论
用户名: 匿名