首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中迭代器变量前面的括号是什么?

Java中迭代器变量前面的括号是什么?
EN

Stack Overflow用户
提问于 2014-05-31 11:24:21
回答 4查看 103关注 0票数 0
代码语言:javascript
复制
    for (Iterator i = guitars.iterator(); i.hasNext(); )
    {
        Guitar guitar = (Guitar)i.next();
        if (guitar.getSerialNumber().equals(serialNumber))
        {
            return guitar;
        }
    }

我不明白(Guitar)i.next()在做什么。看起来,Guitar似乎被传递给了一个函数(...),但我猜它没有任何线索。也不容易为这种结构制定一个搜索查询,所以请原谅可能重复的问题。

EN

回答 4

Stack Overflow用户

发布于 2014-05-31 11:25:49

这是个演员陈述。原因是i.next()返回一个Object,但是您知道它将是一个Guitar,所以您告诉编译器:

“嘿,编译器,我知道这会是一个Guitar,相信我。”

要做到这一点,最好的方法是使用泛型。你基本上是在做同样的事,但它更干净:

代码语言:javascript
复制
for (Iterator<Guitar> i = guitars.iterator(); i.hasNext(); )
{
     Guitar guitar = i.next();
     //...
}
票数 2
EN

Stack Overflow用户

发布于 2014-05-31 11:26:40

(Guitar)i.next();是一个cast运算符。这里是必要的,因为i.next()返回java.lang.Object,但是您知道它是一个Guitar,您希望使用Guiter的属性。

注意,如果guitars是一个泛型集合,那么转换就没有必要了,在这种情况下,迭代器可以正确地键入:

代码语言:javascript
复制
List<Guitar> guitars = ...
for (Iterator<Guitar> i = guitars.iterator(); i.hasNext(); ) {
    Guitar guitar = i.next(); // <<== The cast is no longer necessary
    if (guitar.getSerialNumber().equals(serialNumber))
    {
        return guitar;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-05-31 11:27:38

代码语言:javascript
复制
(Guitar)i.next();

是对类Guitar的对象的强制转换,因为i.next()在原始Iterator中返回Object,但是编译器需要知道使用了Guitar-obejct才能使用Guitar-class特定的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23969479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档