foreachループ内でオブジェクトを直接キャストすることは可能かどうか疑問に思いました。
次の2つのクラスがあり、一方が他方を拡張します。
class Book {};
class ExtendedBook extends Book {};
これで、ループしたい本の配列ができました。これは、ExtendedBook検索であるため、すべての本が実際には拡張本であると確信しています。それらを直接キャストする方法はありますか?
Book [] books = bookSearch.getBooks("extendedBooks");
for (Book book: books){
ExtendedBook eBook = (ExtendedBook) book;
....
}
これには2つのステップが含まれます。最初に本をループし、2番目のステップでそれらをキャストします。ワンステップでそれを行うことができますか?
動作しないもの:
// 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){}
本当の苦痛ではないことはわかっていますが、実際のアクションの代わりにキャストに使用されるダミー変数を保存すると、ループを短くしておくと便利で読みやすくなります。