Прямое приведение в цикле foreach

Мне было интересно, возможно ли прямое приведение объектов в цикле 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){}

Я знаю, что это не очень сложно, но сделать цикл короче было бы неплохо и, возможно, более читабельно, поскольку вы сохраняете фиктивную переменную, которая просто используется для приведения вместо фактического действия. .

11
задан Udo Held 15 June 2012 в 11:51
поделиться