|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-08-09
zzysh 写道 litchi,你提供的代码不能通过编译。似乎list不能直接调用clone方法吧。另外,就算得到一个clone的对象后,这个clone的对象就是只读的吗?
问题1. list.clone报错,因为list是个接口,继承于collection接口,并不继承于Object类,其具体实现(比如ArrayList等),才继承于Object,而clone方法是在Object中定义的 刚才我写的时候没有注意到这个问题,你可以这么写,有点别扭 Arrays.asList((Object[])al.toArray().clone()); 问题2 这个clone的对象和你原来的对象是没有dependence的,所以即使用户修改了这个list,也不会影响你原来的list, |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
litchi 写道 zzysh 写道 litchi,你提供的代码不能通过编译。似乎list不能直接调用clone方法吧。另外,就算得到一个clone的对象后,这个clone的对象就是只读的吗?
问题1. list.clone报错,因为list是个接口,继承于collection接口,并不继承于Object类,其具体实现(比如ArrayList等),才继承于Object,而clone方法是在Object中定义的 刚才我写的时候没有注意到这个问题,你可以这么写,有点别扭 Arrays.asList((Object[])al.toArray().clone()); 问题2 这个clone的对象和你原来的对象是没有dependence的,所以即使用户修改了这个list,也不会影响你原来的list, 谢谢你的解释,对于clone,我用的list是ArrayList啊,按照你说的原理,应该是有clone方法的。我用的是 private List list = new ArrayList(); 所以还是不是很清楚为什么不能用clone()方法 另外,你可能还是没有明白我的意思,我的目的不是让使用者不修改原来的list,我的目的是让使用者得到一个只读的list,他只能使用我里面已经加号的元素,不能用add方法或者其他方法修改里面的内容。所以我觉得clone方法解决不了我的问题。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
哦。第一个问题我知道了。不能用list来声明变量。必须用ArrayList来声明一个变量。引用变量的类型决定了那些方法可以调用。因为引用变量的类型是list,就像litchi所说,是一个接口。所以没有clone方法。这回彻底明白了。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
可以写个List1继承ArrayList,重写add方法。
class List1<E> extends ArrayList { public boolean add(Object o) { if(super.size()<1)//大小为1 { super.add(o); } else { System.out.println("不允许再加入了"); } return true; } } class TestList { private List<String> list = new List1<String>(); public TestList() { list.add("String"); } public List getList(){ return list; } } |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
sinosoft15 写道 可以写个List1继承ArrayList,重写add方法。
class List1<E> extends ArrayList { public boolean add(Object o) { if(super.size()<1)//大小为1 { super.add(o); } else { System.out.println("不允许再加入了"); } return true; } } class TestList { private List<String> list = new List1<String>(); public TestList() { list.add("String"); } public List getList(){ return list; } } 恩。这也是个不错的解决方案。谢谢! |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
传出来时iterator()
那东西是不能改内容的。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
zzysh 写道 哦。第一个问题我知道了。不能用list来声明变量。必须用ArrayList来声明一个变量。引用变量的类型决定了那些方法可以调用。因为引用变量的类型是list,就像litchi所说,是一个接口。所以没有clone方法。这回彻底明白了。
是这样的,但是这样就违背了你面对List接口编程的初衷,转而使用ArrayList这个具体实现了,这并不是一个好的方向 |
|
| 返回顶楼 | |




