我是java新手,刚学到泛型就有点朦了,请问为什么以下这个程序有书上说会有问题?

DsdfsadfSADGSDF 2015-03-04 01:09:43
rt


package j2se;

import java.util.*;

public class test2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));

Integer[] moreInts = { 6, 7, 8, 9, 10 };
collection.addAll(Arrays.asList(moreInts));

Collections.addAll(collection, 11, 12, 13, 14, 15);
Collections.addAll(collection, moreInts);

List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
list.set(1, 99);
list.add(21);
}

}



运行后是出现:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at j2se.test2.main(test2.java:19)

这样一个错误:我判断过是list.add(21);这行有错,我不懂为什么会出错?书上又说得不明白

而且书上有这样一个代码截图:


紫色部分说这部分有错,但我运行却没问题啊,为什么它会这样写。

另外我觉得java编程思想这本书讲泛型时真的很不好,翻译得一坨屎,网上的资料基本上也是说不清楚的,请问各位大神有没有讲泛型入门好而且讲得很详细的介绍下给小弟,感激不尽~~
...全文
444 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
DsdfsadfSADGSDF 2015-03-06
  • 打赏
  • 举报
回复
引用 11 楼 Zero12300 的回复:
thinking in java里说过,Array.aslist返回的是一个固定大小的list
对啊,我看的就是thinking in java 第四版,但我想知道Arrays$ArrayList这个里面是怎么样的……
scmod 2015-03-06
  • 打赏
  • 举报
回复
引用 12 楼 DsdfsadfSADGSDF 的回复:
[quote=引用 11 楼 Zero12300 的回复:] thinking in java里说过,Array.aslist返回的是一个固定大小的list
对啊,我看的就是thinking in java 第四版,但我想知道Arrays$ArrayList这个里面是怎么样的……[/quote] 按住ctrl打开Arrays,搜下ArrayList就知道了
DsdfsadfSADGSDF 2015-03-05
  • 打赏
  • 举报
回复
引用 2 楼 u012818881 的回复:
Arrays.asList初始化的list你看他内部实现源码,返回的是Arrays的内部类实现,本身并没有实现add()方法,所以报错说不支持此方法!所以以后有啥错误都debug到源码一目了然!
但书截图上说的紫色框住的为什么说不可以这样做?明明这样做也没错
DsdfsadfSADGSDF 2015-03-05
  • 打赏
  • 举报
回复
引用 2 楼 u012818881 的回复:
Arrays.asList初始化的list你看他内部实现源码,返回的是Arrays的内部类实现,本身并没有实现add()方法,所以报错说不支持此方法!所以以后有啥错误都debug到源码一目了然!
哦,您的意思是:因为java规定普通数组都是不可随意变大小的,所以这个返回的是普通数组,所以就不适用add()了,是吧?! 不过我看手册上返回的是<T> List<T>这样的喔,也是list吧?
DsdfsadfSADGSDF 2015-03-05
  • 打赏
  • 举报
回复
引用 3 楼 a5987995329 的回复:

List<Integer> list=Arrays.asList(16,17,18,19,20);
System.out.println(list.getClass());

//out
class java.util.Arrays$ArrayList
java.util.Arrays$ArrayList并非 java.util.ArrayList
请问Arrays$ArrayList是什么意思?我查过百度说:“只是为了序列化写的一个内部类”,为什么会说是序列化?这个很不明白
nicholasbobo 2015-03-05
  • 打赏
  • 举报
回复
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);这句创建的列表的大小是固定的,删除添加都会报错
zero12300 2015-03-05
  • 打赏
  • 举报
回复
thinking in java里说过,Array.aslist返回的是一个固定大小的list
DsdfsadfSADGSDF 2015-03-05
  • 打赏
  • 举报
回复
引用 9 楼 scmod 的回复:
Arrays.asList返回的类型不是ArrayList 是个别的类,那个类没实现add()方法,所以调用就会有问题
个别的类在手册上可以查到吗?
scmod 2015-03-05
  • 打赏
  • 举报
回复
Arrays.asList返回的类型不是ArrayList 是个别的类,那个类没实现add()方法,所以调用就会有问题
DsdfsadfSADGSDF 2015-03-05
  • 打赏
  • 举报
回复
引用 7 楼 nicholasbobo 的回复:
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);这句创建的列表的大小是固定的,删除添加都会报错
那意思是不是我上面所说的:因为java规定普通数组都是不可随意变大小的,所以这个返回的是普通数组,所以就不适用add()了?
七宝 2015-03-04
  • 打赏
  • 举报
回复

List<Integer> list=Arrays.asList(16,17,18,19,20);
System.out.println(list.getClass());

//out
class java.util.Arrays$ArrayList
java.util.Arrays$ArrayList并非 java.util.ArrayList
汉高祖 2015-03-04
  • 打赏
  • 举报
回复
Arrays.asList初始化的list你看他内部实现源码,返回的是Arrays的内部类实现,本身并没有实现add()方法,所以报错说不支持此方法!所以以后有啥错误都debug到源码一目了然!
DsdfsadfSADGSDF 2015-03-04
  • 打赏
  • 举报
回复
还有一个Arrays.asList(),这个必须要用的吗?还是只是另外一种初始化方式而已 ……

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧