在API的说明中,Arrays.asList()方法的返回值是List类型的
所以,当你调用Arrays.asList(c);时,获取的实际上是一个List类型的对象
而ArrayList是List的实现类(你可以理解为子类)
JAVA中规定,如果你将一个子类的对象赋值给一个父类的引用时,你可以直接赋值
而如果你将一个父类的对象赋值给一个子类的引用时,你就必须进行强制类型转换,否则编译就会出错
(关于引用和对象的关系,可以参考这篇帖子:http://bbs.itheima.com/thread-1332-1-1.html)
所以,如果想让你这段代码编译通过的话,需要把第7行这么改:
ArrayList <String> m= (ArrayList) Arrays.asList(c);
当然,这样虽然编译可以通过,但是在运行的时候还是会出错的
因为Arrays.asList();返回的List对象实际上并不是一个ArrayList对象
所以你在将这个List对象强制转换成ArrayList对象的时候就会出错
所以,最稳妥的写法应该是像下面这样:- class L {
- public static void main(String args[]) {
- String[] c = { "ligang", "lignaglsdjf", "lignagloei8989eiorweuiui" };
- //在进行任何强制转换前,首先判断你要转换的对象是不是你要转换的类型
- if (Arrays.asList(c) instanceof ArrayList) {
- ArrayList <String> am = (ArrayList)Arrays.asList(c);
- System.out.println(am);
- } else {
- List <String> m = Arrays.asList(c);
- System.out.println(m);
- }
- }
- }
复制代码 [ 本帖最后由 李叶 于 2011-09-01 21:57 编辑 ] |