|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-08-09 关键字: core java
例如,我有下面这个类:
import java.util.ArrayList;
import java.util.List;
class TestList
{
private List<String> list = new ArrayList<String>();
public TestList()
{
list.add("String");
}
public List getList(){
return list;
}
}
怎样确保引用我这个类的类调用getList方法后,不能更改得到的list里面的值。比如不能通过list.add("new string")来添加新的值进去? 谢谢! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
就是说如何定义这个list,确保引用它的人,只能使用我初始化时定义好的内容,不能改变其中的内容。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
java.util.Collections.unmodifiableCollection()
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
方法既简单又麻烦:不提供getList接口提供对象引用,只提封装过的接口如addObjectToList...
这样可以保证接口使用者只使用你提供的功能,麻烦的地方是如果要提供的接口很多要写很多代码 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
实现一个list,用你得到的那个list来包装
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
谢谢各位的回复。
hunk,能否举一个使用java.util.Collections.unmodifiableCollection()的例子,以前没有用过这个方法。谢谢。 mvmouse,我不太明白你的意思,或者你没有理解我的意思。我是需要引用者得到我这个list的。但是他只能使用里面现有的值,而不可以改变其中的值。 liquidthinker,自己封装一个list好像太麻烦了吧。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
试一试这个
# public List getList(){ # return java.util.Collections.unmodifiableList(list); # } |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
zzysh 写道 谢谢各位的回复。
hunk,能否举一个使用java.util.Collections.unmodifiableCollection()的例子,以前没有用过这个方法。谢谢。 mvmouse,我不太明白你的意思,或者你没有理解我的意思。我是需要引用者得到我这个list的。但是他只能使用里面现有的值,而不可以改变其中的值。 liquidthinker,自己封装一个list好像太麻烦了吧。 如果不想封装,返回的时候返回一个list的clone给调用者吧
public List getList(){
return list.clone();
}
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
hunk,你的思路是可以。不过代码那样写不能通过编译。需要改一下。不过这个思路是可行的。如果客户端试图使用add方法更改这个Collection里面的值,会抛出UnsupportedOperationException异常
对于List应该使用unmodifiableList方法来返回只读的List视图。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-09
litchi,你提供的代码不能通过编译。似乎list不能直接调用clone方法吧。另外,就算得到一个clone的对象后,这个clone的对象就是只读的吗?
|
|
| 返回顶楼 | |



