我想知道是否可以在 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){}
我知道这不是一个真正的痛苦,但是保持循环更短会很好,并且当您保存一个虚拟变量时可能更具可读性,该变量仅用于强制转换而不是实际操作。