foreachループ内でオブジェクトを直接キャストすることが可能かどうか疑問に思っていました。そのExtendedBook検索は、私はすべての書籍であることを確信しているのでforeachループで直接キャスト
class Book {};
class ExtendedBook extends Book {};
今、私たちは、私はをループにしたいブックの配列を持っている:私たちは、次の2つのクラスが、一方が他方を拡張し、持っている
実際には拡張書籍。直接キャストする方法はありますか?
Book [] books = bookSearch.getBooks("extendedBooks");
for (Book book: books){
ExtendedBook eBook = (ExtendedBook) book;
....
}
これには2つの手順があります。最初に本をループし、2番目のステップでそれらをキャストします。 1つのステップでそれを行うことはできますか?私はそのない本当の痛みを知っているが、あなただけの鋳造に使用されるダミー変数を、保存するように短いループを維持することは素晴らしく、多分、より読みやすいでしょう
// 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かもしれませんが、要素ごとにしか変更できません。あなたはループ内でunboxすることができます。 '' long [] array = ... for(long l:array){} ' –