黑马程序员技术交流社区
标题:
List改为ArrayList后,无法编译,求教。
[打印本页]
作者:
黑马李刚
时间:
2011-9-1 21:24
标题:
List改为ArrayList后,无法编译,求教。
[code=java]import java.util.*;
class L
{
public static void main(String args[])
{
String[] c={"ligang","lignaglsdjf","lignagloei8989eiorweuiui"};
List<String> m=Arrays.asList(c);
System.out.println(m);
}
}[/code]
作者:
李叶
时间:
2011-9-1 21:51
在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 编辑
]
作者:
匿名
时间:
2011-9-1 22:21
灌水,学习一下
作者:
匿名
时间:
2011-9-1 22:28
李叶不仅功夫扎实,而且还很有耐性!值得学习~~~
作者:
匿名
时间:
2011-9-1 22:35
我明白了,谢谢李叶的回答,俺学习之榜样。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2