1. 程式人生 > >201671010127 2016-2017-12 泛型程序設計之集合類

201671010127 2016-2017-12 泛型程序設計之集合類

obj import .cn tsa vector 變量名 dog src ceo

  在第十周的程序測試題中,有一個程序在運行時發生了異常,當時老師留下該問題讓同學們自己查資料解決,我通過分析代碼和查閱資料後找到了該類問題的解決方法,接下來就和大家分享我的經歷。首先我先給出該程序源碼如下:

  

import java.util.Vector;
//主類
public class CatsAndDogs{
public static void main(String[] args){
Vector<Object> cats = new Vector<Object>();//初始化一個Vector類變量,變量名為cats
for(int i=0; i<7; i++)
cats.addElement(new Cat(i));//利用addElement方法向集合中添加元素
cats.addElement(new Dog(7));
for(int i=0; i<cats.size(); i++)
((Cat)cats.elementAt(i)).print();//通過強制類型轉換輸出集合中的元素
}
}
//定義一個Cat類
class Cat {
private int catNumber;
Cat(int i){catNumber = i;}
void print(){System.out.println("Cat #"+catNumber);}
}
//定義一個Dog類
class Dog {
private int dogNumber;
Dog(int i){dogNumber = i;}
void print(){System.out.println("Dog #"+dogNumber);}
}

運行結果如下:

技術分享

  通過仔細查看源代碼,我發現原來問題是由於在添加第七個元素時添加的類型是Cat類型的,而在輸出時轉換成了Dog類,出現了強制類型轉換失敗,接下來我將代碼做出如下修改:

import java.util.Vector;
//主類
public class CatsAndDogs{
public static void main(String[] args){
Vector<Object> cats = new Vector<Object>();//初始化一個Vector類變量,變量名為cats
for(int i=0; i<7; i++)
cats.addElement(new Cat(i));//利用addElement方法向集合中添加元素
cats.addElement(new Dog(7));
for(int i=0; i<cats.size(); i++)
{
Object elem=cats.elementAt(i);
if(elem instanceof Cat)
((Cat)cats.elementAt(i)).print();//通過強制類型轉換輸出集合中的元素
else
((Dog)cats.elementAt(i)).print();

}
}
}
//定義一個Cat類
class Cat {
private int catNumber;
Cat(int i){catNumber = i;}
void print(){System.out.println("Cat #"+catNumber);}
}
//定義一個Dog類
class Dog {
private int dogNumber;
Dog(int i){dogNumber = i;}
void print(){System.out.println("Dog #"+dogNumber);}
}

次試運行結果如下:

技術分享

此時結果順利輸出。

201671010127 2016-2017-12 泛型程序設計之集合類