java - 在 foreach 循环中直接转换

标签 java arrays foreach

我想知道是否可以在 foreach 循环中直接转换对象。

我们有以下两个类,一个扩展另一个:

class Book {};
class ExtendedBook extends Book {};

现在我们有一个我想遍历的 Books 数组,因为它是一个 ExtendedBook 搜索,我确信所有 Books 实际上都是 Extended Books。有没有办法直接转换它们?

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){}

我知道这不是真正的痛苦,但保持循环较短会很好,并且在您保存虚拟变量时可能更具可读性,它仅用于转换而不是实际操作。

最佳答案

使用泛型怎么样?

将您的 getBooks 签名写为:

<B extends Book> B [] getBooks(Class<B> bookType)

现在,如果你想搜索ExtendedBook 类型的书籍,只需调用:

ExtendedBooks [] eBooks = bookSearch.getBooks(ExtendedBook.class)

不需要类型转换或其他不安全的东西。漂亮干净。

当然,您仍然需要确保只有 ExtendedBook 只返回那种书,但看起来您已经解决了这个问题。

关于java - 在 foreach 循环中直接转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050148/

相关文章:

vbscript - 如何退出函数中的每个循环?

java - Android推送通知: Multiple notifications displays same data

java - 简单的写入文件代码可以在java中运行,但不能在android设备上运行

javascript - 在我的数组中选择 2 个随机值

arrays - 使用 For each Statement 循环遍历 VBA Excel 中的多维数组 - 仅第一维

database - var data = Database.Open ("databasename").Query("SELECT * FROM table); visual studio

java - 新建maven项目

java - 如果我将加密的 html 文件解析为字符串,我可以以某种方式从中获取文本吗?

python - 来自 3D numpy 数组 Python 的动画等高线图

python - 在 numpy 数组中查找负值和正值