【发布时间】:2012-06-18 11:49:23
【问题描述】:
我想知道是否可以在 foreach 循环中直接转换对象。
我们有以下两个类,一个扩展另一个:
class Book {};
class ExtendedBook extends Book {};
现在我们有一个我想要循环浏览的书籍数组,因为它是一个扩展书籍搜索,我确信所有书籍实际上都是扩展书籍。有没有办法直接投射它们?
Book [] books = bookSearch.getBooks("extendedBooks");
for (Book book: books){
ExtendedBook eBook = (ExtendedBook) book;
....
}
这包括两个步骤。首先循环浏览书籍,然后在第二步进行投射。可以一步到位吗?
什么不起作用:
// Directly assign it to a different type
for (ExtendedBook book : books){}
// Directly casting the array
ExtendedBooks [] eBooks = (ExtendedBooks []) books;
// Same goes for trying both in one step
for (ExtendedBook book : (ExtendedBook []) books){}
我知道这不是一个真正的痛苦,但保持循环更短会更好,并且可能更易读,因为你保存了一个虚拟变量,该变量仅用于强制转换而不是实际操作。
【问题讨论】:
-
看来
books是 Book 而非 ExtendedBook 的数组。数组的元素可能是 ExtendedBook,但您只能对每个元素进行更改。顺便说一句,您可以循环拆箱Long[] array = ... for(long l: array) { }