java之封装ArrayList,javaarraylist
分享于 点击 3693 次 点评:266
java之封装ArrayList,javaarraylist
转载请注明出处
http://blog.csdn.net/pony_maggie/article/details/44786233
作者:小马
ArrayList很好用,可以添加任意类型,动态增长,各种库函数支持,如下是个简单示例:
public class FillingList {
/**
* @param args
* fill只会对已经存在空间填充,所以下面的for循环必不可少
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++)
{
list.add("");
}
Collections.fill(list, "hello");
System.out.println(list);
}
}
但是仔细想一下,它存在一个问题,就是不知道add进来的类型。因为add方法本身接受的是Object类型,当我们取出来列表中的内容使用时,需要强制转换实际的类型,如下所示:
public static void main(String[] args)
{
ArrayList cats = new ArrayList();
for(int i = 0; i < 7; i++)
{
cats.add(new Cat(i));
}
for(int i = 0; i < 7; i++)
{
((Cat)cats.get(i)).print();
}
如果程序员忘记了原来add进来的类型,然后在get的时候,转换成错误的实际类型了,就像下面这样,会怎样呢?
public class CatsAndDogs
{
/**
* @param args
*/
public static void main(String[] args)
{
ArrayList cats = new ArrayList();
for(int i = 0; i < 7; i++)
{
cats.add(new Cat(i));
}
cats.add(new Dog(7));
for(int i = 0; i < 7; i++)
{
((Cat)cats.get(i)).print();
}
for(int i = 0; i < cats.size(); i++)
{
((Cat)cats.get(i)).print();
}
//dog is detected at run time
}
}
答案是编译没有问题,运行时才会报错。这样就会有很大的风险。为了解决这个问题,一般会再封装一下ArrayList,建立自己的只允许特定类型的ArrayList,如下代码:
public class MouseList
{
private ArrayList list = new ArrayList();
public void add(Mouse m)
{
list.add(m);
}
public Mouse get(int index)
{
return (Mouse)list.get(index);
}
public int size()
{
return list.size();
}
}
思考一个问题,如果采用上面这种封装的形式,而是继承ArrayList,能不能达到同样的效果呢?
相关文章
- 暂无相关文章
用户点评