for (Iterator i = guitars.iterator(); i.hasNext(); )
{
Guitar guitar = (Guitar)i.next();
if (guitar.getSerialNumber().equals(serialNumber))
{
return guitar;
}
}
我无法理解 (Guitar)i.next()
正在做什么。看起来好像Guitar
被传递给函数(...)
,但我猜测并且没有任何线索。同样不容易为这种构造制定搜索查询,所以请原谅可能重复的问题。
答案 0 :(得分:2)
这是一个演员陈述。原因是i.next()
返回Object
,但您知道它将是Guitar
,所以您告诉编译器:
"嘿,编译器,我知道它会成为
Guitar
,相信我。"
这样做的巧妙方法是使用泛型。你基本上都是这样做的,但它更干净:
for (Iterator<Guitar> i = guitars.iterator(); i.hasNext(); )
{
Guitar guitar = i.next();
//...
}
答案 1 :(得分:2)
(Guitar)i.next();
是强制转换操作符。这里有必要,因为i.next()
会返回java.lang.Object
,但您知道它是Guitar
,并且您想要使用Guiter
的属性。
请注意,如果guitars
是泛型集合,则不需要强制转换,在这种情况下,可以正确键入迭代器:
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 :(得分:0)
(Guitar)i.next();
是对类Guitar
的对象的强制转换,因为i.next()
以原始Iterator
和Object
返回,但编译器需要知道您有{{1} - 使用obejct来使用Guitar
- 类特定方法。
答案 3 :(得分:0)
你可以像其他人所说的那样投射i.next()。我认为guitars
是一个列表,所以你也可以使用FOR EACH循环来迭代它:
for (Guitar guitar : guitars) {
if (guitar.getSerialNumber().equals(serialNumber))
{
return guitar;
}
}