Mi chiedevo se fosse possibile gettare direttamente oggetti all'interno di un ciclo foreach.Fusione diretta nel ciclo foreach
abbiamo le seguenti due classi sono state uno si estende l'altro:
class Book {};
class ExtendedBook extends Book {};
Ora abbiamo una serie di libri che voglio scorrere, perché la sua una ricerca ExtendedBook sono sicuro che tutti i libri sono in realtà libri estesi. C'è un modo per scriverli direttamente?
Book [] books = bookSearch.getBooks("extendedBooks");
for (Book book: books){
ExtendedBook eBook = (ExtendedBook) book;
....
}
Questo prevede due passaggi. In primo luogo scorrere i libri e al secondo passo gettarli. Si può fare in un solo passaggio?
Che cosa non funziona:
// 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){}
So che la sua non è un vero e proprio dolore, ma mantenendo il ciclo più breve sarebbe bello e forse più leggibile come si salva una variabile dummy, che è appena usato per la fusione invece dell'azione reale.
Sembra che 'books' sia un array di Book non ExtendedBook. Gli elementi dell'array potrebbero essere ExtendedBook, ma puoi cambiarlo solo per ciascun elemento. btw puoi unbox in un ciclo 'Long [] array = ... for (long l: array) {}' –