A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马李刚 黑马帝   /  2011-9-1 21:24  /  1879 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[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]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

4 个回复

倒序浏览
在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对象的时候就会出错

所以,最稳妥的写法应该是像下面这样:
  1. class L {
  2.   public static void main(String args[]) {
  3.     String[] c = { "ligang", "lignaglsdjf", "lignagloei8989eiorweuiui" };
  4.     //在进行任何强制转换前,首先判断你要转换的对象是不是你要转换的类型
  5.     if (Arrays.asList(c) instanceof ArrayList) {
  6.       ArrayList <String> am = (ArrayList)Arrays.asList(c);
  7.       System.out.println(am);
  8.     } else {
  9.       List <String> m = Arrays.asList(c);
  10.       System.out.println(m);
  11.     }
  12.   }
  13. }
复制代码
[ 本帖最后由 李叶 于 2011-09-01  21:57 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 回答的很好啊!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-1 22:21:53
藤椅
灌水,学习一下
回复 使用道具 举报
黑马网友  发表于 2011-9-1 22:28:44
板凳
李叶不仅功夫扎实,而且还很有耐性!值得学习~~~
回复 使用道具 举报
黑马网友  发表于 2011-9-1 22:35:00
报纸
我明白了,谢谢李叶的回答,俺学习之榜样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马