Мне было интересно, возможно ли прямое приведение объектов в цикле 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){}
Я знаю, что это не очень сложно, но сделать цикл короче было бы неплохо и, возможно, более читабельно, поскольку вы сохраняете фиктивную переменную, которая просто используется для приведения вместо фактического действия. .