我遇到过以前遇到的问题,但我仍然不知道为什么会这样。 这是代码:
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对象的列表,所以我真的没有看到这里有什么问题。
任何人都可以帮助我吗?
危害
答案 0 :(得分:11)
Iterator it
将仅返回Object。 Iterator<Show>
将为您提供Show
类型的对象。如果您没有这样声明,则不会仅假设引用来自您的List<Show>
还有一些未经请求的评论:)
一个人应该通常编程到接口,getCollection应该返回List<Show>
而不是ArrayList<Show>
,除非真的有一些与ArrayList
具体相关的事情。
你也可以使用foreach结构而不是迭代器,这通常比可读性等更好。
for (Show show : getCollection()) {
amount += show.getSeasonCount();
}
答案 1 :(得分:2)
我认为您需要Iterator<Show> it = getCollection().iterator();
中的getSeasonsCount()
`
答案 2 :(得分:2)
如果要确保条目是唯一的,为什么不使用Set而不是列表?
另请注意,您可以稍微改写一下,这对我来说更具可读性:
public int getSeasonsCount(){
int amount = 0;
for (Show show : getCollection()) {
amount += show.getSeasonCount();
}
return amount;
}