for (Iterator i = guitars.iterator(); i.hasNext(); )
{
Guitar guitar = (Guitar)i.next();
if (guitar.getSerialNumber().equals(serialNumber))
{
return guitar;
}
}我不明白(Guitar)i.next()在做什么。看起来,Guitar似乎被传递给了一个函数(...),但我猜它没有任何线索。也不容易为这种结构制定一个搜索查询,所以请原谅可能重复的问题。
发布于 2014-05-31 11:25:49
这是个演员陈述。原因是i.next()返回一个Object,但是您知道它将是一个Guitar,所以您告诉编译器:
“嘿,编译器,我知道这会是一个
Guitar,相信我。”
要做到这一点,最好的方法是使用泛型。你基本上是在做同样的事,但它更干净:
for (Iterator<Guitar> i = guitars.iterator(); i.hasNext(); )
{
Guitar guitar = i.next();
//...
}发布于 2014-05-31 11:26:40
(Guitar)i.next();是一个cast运算符。这里是必要的,因为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;
}
}发布于 2014-05-31 11:27:38
(Guitar)i.next();是对类Guitar的对象的强制转换,因为i.next()在原始Iterator中返回Object,但是编译器需要知道使用了Guitar-obejct才能使用Guitar-class特定的方法。
https://stackoverflow.com/questions/23969479
复制相似问题