我想知道是否可以在foreach循环中直接投射对象。在foreach循环中直接投射
我们有以下两个类是一个扩展其他:
class Book {};
class ExtendedBook extends Book {};
现在我们有,我想通过循环书籍的数组,因为它的一个ExtendedBook搜索我敢肯定,所有的书都实际上扩展书籍。有没有办法直接施放它们?
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 not ExtendedBook的数组。数组的元素可能是ExtendedBook,但您只能为每个元素更改此元素。顺便说一句,你可以在一个循环中取消装箱Long [] array = ... for(long l:array){} –