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

Java中迭代器变量前面的括号是什么?,java,syntax,Java,Syntax,我不明白我在做什么。看起来好像吉他被传递给了一个函数(…),但我猜,没有任何线索。也不容易为这种结构制定搜索查询,因此请原谅可能出现的重复问题。这是一个决定性的陈述。原因是i.next()返回一个对象,但您知道它将是一个吉他,因此您告诉编译器: “嘿,编译器,我知道这将是一把吉他,相信我。” 实现这一点的巧妙方法是使用泛型。你基本上也在做同样的事情,但它更干净: for (Iterator i = guitars.iterator(); i.hasNext(); ) {

我不明白我在做什么。看起来好像
吉他
被传递给了一个函数
(…)
,但我猜,没有任何线索。也不容易为这种结构制定搜索查询,因此请原谅可能出现的重复问题。

这是一个决定性的陈述。原因是
i.next()
返回一个
对象
,但您知道它将是一个
吉他
,因此您告诉编译器:

“嘿,编译器,我知道这将是一把
吉他
,相信我。”

实现这一点的巧妙方法是使用泛型。你基本上也在做同样的事情,但它更干净:

    for (Iterator i = guitars.iterator(); i.hasNext(); )
    {
        Guitar guitar = (Guitar)i.next();
        if (guitar.getSerialNumber().equals(serialNumber))
        {
            return guitar;
        }
    }
for(迭代器i=guitars.Iterator();i.hasNext();)
{
吉他=i.next();
//...
}

这是一个决定性的声明。原因是
i.next()
返回一个
对象
,但您知道它将是一个
吉他
,因此您告诉编译器:

“嘿,编译器,我知道这将是一把
吉他
,相信我。”

实现这一点的巧妙方法是使用泛型。你基本上也在做同样的事情,但它更干净:

    for (Iterator i = guitars.iterator(); i.hasNext(); )
    {
        Guitar guitar = (Guitar)i.next();
        if (guitar.getSerialNumber().equals(serialNumber))
        {
            return guitar;
        }
    }
for(迭代器i=guitars.Iterator();i.hasNext();)
{
吉他=i.next();
//...
}
(吉他)i.next()是一个强制转换运算符。这在这里是必要的,因为
i.next()
返回
java.lang.Object
,但是您知道它是一个
吉他
,并且您想要使用
吉他
的属性

请注意,如果
guitars
是一个泛型集合,则演员阵容将变得不必要,在这种情况下,迭代器可以正确键入:

for (Iterator<Guitar> i = guitars.iterator(); i.hasNext(); )
{
     Guitar guitar = i.next();
     //...
}
列出吉他=。。。
for(迭代器i=guitars.Iterator();i.hasNext();){
吉他吉他=i.next();//
(吉他)i.next();
是一个cast操作符。在这里它是必需的,因为
i.next()
返回
java.lang.Object
,但是你知道它是一个
吉他,你想使用
Guiter
的属性

请注意,如果
guitars
是一个泛型集合,则演员阵容将变得不必要,在这种情况下,迭代器可以正确键入:

for (Iterator<Guitar> i = guitars.iterator(); i.hasNext(); )
{
     Guitar guitar = i.next();
     //...
}
列出吉他=。。。
for(迭代器i=guitars.Iterator();i.hasNext();){
吉他=i.下一个();//
是对类
guitart
的对象的强制转换,因为
i.next()
以原始的
迭代器返回
对象
,但是编译器需要知道您使用了
guitart
-obejct来使用
guitart
-类特定的方法

是对类
guitart
的对象的强制转换,因为
i.next()
以原始
迭代器返回
对象
,但编译器需要知道您使用了
guitart
-obejct来使用
guitart
-类特定方法。

您可以强制转换i.next(),正如其他人所说。我认为
guitars
是一个列表,因此您也可以使用FOR-EACH循环来迭代它:

(Guitar)i.next();
正如其他人所说,您可以使用i.next()。我认为
guitars
是一个列表,因此您也可以使用FOR-EACH循环来迭代它:

(Guitar)i.next();

您正在使用原始迭代器。在调用
next()
时返回该对象。在不需要向下转换的地方使用泛型迭代器。您正在使用原始迭代器。在
next()时返回该对象调用
。在不需要向下转换的地方使用泛型迭代器。我认为
while
循环比
for
循环更容易理解它。显式转换不再必要:)转换仍然完成,但在
下一步()
方法。@Braj
for
-问题中也使用了循环。@MartijnCourteaux没错,Java泛型在很大程度上是一种“隐藏我的角色”游戏。我认为
while
循环比
for
循环更容易理解。显式强制转换不再必要:)强制转换仍然完成,但在
下一步()
方法中。@Braj
for
-循环也被用于问题中。@MartijnCourteaux没错,Java泛型非常有用“隐藏我的施法”游戏。我认为
while
循环比
for
循环更容易理解。我认为
while
循环比
for
循环更容易理解。