Question
笔者在使用java.util.Set的toArray方法时,发现报了java.lang.ClassCastException异常,一时比较纳闷。类似源码如下:
Solution
在发现该异常后,就去查看了Collection接口的JavaDoc,看方法介绍就是将集合元素按照数组的方式返回,乍一看确实没什么问题,但是在Collection还看到一个重载方法,定义如下:
仔细看无参的toArray方法返回就明白了,该方法返回的是Object[],若显式的Cast就会因为类型不为Object而出现问题,而另一个重载方法是采用的泛型定义,就不会有这个问题,我们重写一下刚刚有问题的代码:
这下问题就解决了,Java提供的集合是很方便,但在使用时也要注意,比如toArray这个方法,使用的姿势不对,编译器也没有提示,最后在运行时才会暴露出来。所以强烈建议使用泛型toArray方法去转换。