
前言
《阿里巴巴Java开发手册》中提出了以下几点建议和规则:
「规则1:」

「规则2:」

本文通过源码分析,给大家讲清楚《手册》为什么这么规定
ArrayList的subList分析
首先通过 IDEA 的提供的类图工具,我们可以查看下该类的继承体系。
具体步骤:在 SubList 类中 右键,选择 “Diagrams” -> “Show Diagram” 。

可以看到 SubList 和 ArrayList 的继承体系非常类似,都实现了 RandomAccess 接口 继承自 AbstarctList。
但是SubList 和 ArrayList 并没有继承关系,因此 ArrayList 的 SubList 并不能强转为 ArrayList 。
「下面我们写一个简单的测试代码片段来验证转换异常问题:」
java
复制代码
public static void main(String[] args) { List<Integer> integerList = new ArrayList<>(); integerList.add(0); integerList.add(1); integerList.add(2); List<Integer> subList = integerList.subList(0, 1); ArrayList<Integer> castList = (ArrayList<Integer>) subList; }
输出:
java
复制代码
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
从上面的结果也可以清晰地看出,subList 并不是

最低0.47元/天 解锁文章
801

被折叠的 条评论
为什么被折叠?



