只显示主题贴
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
{
priv ...
- 进入论坛 Java 版
哦。第一个问题我知道了。不能用list来声明变量。必须用ArrayList来声明一个变量。引用变量的类型决定了那些方法可以调用。因为引用变量的类型是list,就像litchi所说,是一个接口。所以没有clone方法。这回彻底明白了。
- 进入论坛 Java 版
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的对象和你原 ...
- 进入论坛 Java 版
litchi,你提供的代码不能通过编译。似乎list不能直接调用clone方法吧。另外,就算得到一个clone的对象后,这个clone的对象就是只读的吗?
- 进入论坛 Java 版
hunk,你的思路是可以。不过代码那样写不能通过编译。需要改一下。不过这个思路是可行的。如果客户端试图使用add方法更改这个Collection里面的值,会抛出UnsupportedOperationException异常
对于List应该使用unmodifiableList方法来返回只读的List视图。
- 进入论坛 Java 版
谢谢各位的回复。hunk,能否举一个使用java.util.Collections.unmodifiableCollection()的例子,以前没有用过这个方法。谢谢。mvmouse,我不太明白你的意思,或者你没有理解我的意思。我是需要引用者得到我这个list的。但是他只能使用里面现有的值,而不可以改变其中的值。liquidthinker,自己封装一个list好像太麻烦了吧。
- 进入论坛 Java 版
就是说如何定义这个list,确保引用它的人,只能使用我初始化时定义好的内容,不能改变其中的内容。
- 进入论坛 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里面的值。比如不能通过 ...
- 进入论坛 Java 版







评论排行榜