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