我有一個我以前遇到的問題,但我仍然不知道它爲什麼會發生。 這是代碼:Java:ArrayList返回對象,而不是所需的類型
package Program;
import java.util.ArrayList;
import java.util.Iterator;
/**
* This class will hold the full collection of the user.
*
* @author Harm De Weirdt
*/
public class ShowManager {
/**
* The collection of shows of this user.
*/
private ArrayList<Show> collection;
private static final ShowManager INSTANCE = new ShowManager();
// Private constructor prevents instantiation from other classes
private ShowManager() {
collection = new ArrayList<Show>();
}
public static ShowManager getInstance() {
return INSTANCE;
}
private ArrayList<Show> getCollection() {
return collection;
}
/**
* Add a new Show to the collection
*
* @param newShow
* The show to be added
* @post if <newShow> was not null and the collection didn't already contain
* <newShow>, <newShow> was added to the collection
* |getCollection().contains(<newShow>)
*/
public void addShow(Show newShow){
if(newShow != null && !getCollection().contains(newShow)){
getCollection().add(newShow);
}
}
/**
* Gives the amount of shows this user has in his collection.
*
* @return the size of <collection>.
*/
public int getShowCount(){
return getCollection().size();
}
public int getSeasonsCount(){
Iterator it = getCollection().iterator();
int amount = 0;
while(it.hasNext()){
amount += it.next().getSeasonCount();
}
return amount;
}
}
的問題是與getSeasonsCount方法。 it.next()返回一個Object而不是一個Show對象。 據我所知,這是一個泛型的問題,但我指定收集ArrayList是一個Show對象的列表,所以我真的不明白這裏有什麼問題。
任何人都可以幫助我嗎?
危害
教訓:不要忽略編譯器警告「的Iterator是一個原始類型...」; - ) – 2010-07-16 22:22:33
爲什麼最好讓getCollection返回一個List而不是ArrayList?我真的不明白這與接口有什麼關係..(我仍在學習Java,並且我不得不麻煩了解接口的使用和功能) –
2010-07-16 22:35:11
假設有一天你得到一個要求,你的類必須是線程安全的,以便多個用戶可以訪問同一個用戶。您可能想要將ArrayList更改爲Vector。如果你將它聲明爲List,你所要做的就是將它在構造函數中初始化的地方進行更改,並且它在任何地方都是固定的。如果您將它作爲ArrayList的實例傳遞,則必須在整個應用程序中的任何位置進行更改。 – Affe 2010-07-16 22:41:17