foreach 루프 내에서 직접 개체를 캐스팅 할 수 있는지 궁금합니다.foreach 루프에서 직접 캐스팅
우리는 하나가 다른 다음과 같은 두 개의 클래스를 확장하고있다하십시오 ExtendedBook 검색 나는 모든 책이라는 것을 확신 그 때문에 지금
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){}
을 나는 그것하지 진짜 고통을 알고 있지만, 당신은 단지 주조에 사용되는 더미 변수를 저장 짧은 루프를 유지하는 것은 좋은 어쩌면 더 읽을 것 실제 행동 대신.
'books'는 Book not ExtendedBook의 배열입니다. 배열의 요소는 ExtendedBook 일 수도 있지만 각 요소에 대해서만 변경할 수 있습니다. btw 루프에서 unbox 할 수 있습니다.'long [] array = ... for (long l : array) {}' –