我有一本书课,然后是一本小说和一本科学书类,扩展了这本书。
我使用书类创建了一个ArrayList,然后将小说和科学书籍插入其中。现在我试图遍历ArrayList来计算那里有多少小说。我该怎么说?
很想看到一些这样的例子!我已经有一段时间了。
答案 0 :(得分:5)
使用instanceof
。
e.g。
int numberOfNovels = 0;
for(int i = 0; i < arrayOfBooks.length; i++){
if(arrayOfBooks[i] instanceof Novel){
numberOfNovels++;
}
}
或者,使用foreach:
int numberOfNovels = 0;
for(Book book: arrayOfBooks){
if(books instanceof Novel){
numberOfNovels++;
}
}
答案 1 :(得分:4)
您可以使用instanceof
检查对象的实际类型:
List<Book> books = new ArrayList<Book>();
books.add(aNovel);
books.add(aScienceBook);
int novelCount = 0;
for (Book book : books) {
if (book instanceof Novel)
novelCount++;
}
答案 2 :(得分:4)
尽管Froadie说instanceof
允许您检查每个元素的具体类型是正确的,但这通常表明您的设计存在问题。
可能值得考虑为什么你必须知道小说的数量。你想在书上不存在的小说上调用一种方法吗?您为所有书籍使用的集合可能是错误的分组书籍吗?如果你想提供一些计算某种方法的方法,是否值得考虑一种方法来抽象出书籍的计算方式?
如果您发现此案例不会引起设计问题,instanceof
就是您的答案。
答案 3 :(得分:2)
你可以沿着这些方向做点什么:
public int getNovelCount(List<Book> bookList) {
int novelCount = 0;
for (Book book : bookList) {
if (book instanceof Novel) {
novelCount++;
}
}
return novelCount;
}
if语句只对新对象的对象成立,即科学书对象在if语句中返回false,因此不计算。
答案 4 :(得分:0)
可以使用instanceof
或book.getClass.equals(Novel.class)
。无论哪种方式都在for循环中遍历ArrayList:
int count = 0;
for(Book book: books){
if(book.getClass.equals(Novel.class)) count++;
}
return count;