Me preguntaba si es posible lanzar objetos directamente dentro de un bucle foreach.Fundición directa en el bucle foreach
tenemos las dos clases siguientes se extiende uno al otro:
class Book {};
class ExtendedBook extends Book {};
Ahora tenemos una gran variedad de libros que quiero recorrer, porque es una búsqueda ExtendedBook estoy seguro de que todos los libros son en realidad, libros extendidos. ¿Hay alguna manera de lanzarlos directamente?
Book [] books = bookSearch.getBooks("extendedBooks");
for (Book book: books){
ExtendedBook eBook = (ExtendedBook) book;
....
}
Esto implica dos pasos. Primero recorriendo los libros y en el segundo paso lanzándolos. ¿Puede uno hacerlo en un solo paso?
Lo que no funciona:
// 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){}
Sé que no es un verdadero dolor, pero manteniendo el bucle más corto sería bueno y tal vez sea más legible que se guarda una variable ficticia, que solo se utiliza para la fundición en lugar de la acción real.
Parece que 'books' es una matriz de Book not ExtendedBook. Los elementos de la matriz pueden ser ExtendedBook, pero solo puede cambiar esto para cada elemento. Por cierto, puedes deshacerte de un bucle 'Long [] array = ... for (long l: array) {} ' –