Java 为什么在while循环中使用iTerator对象时需要类型转换?

Java 为什么在while循环中使用iTerator对象时需要类型转换?,java,collections,Java,Collections,我现在正在学习java。在使用Iterator编写遍历ArrayList的代码时,我必须先使用类名,然后才能将迭代器的对象与next()函数一起使用。有人能帮我吗 import java.util.*; public class arraylistwithuserdefinedclass { public static void main(String[] args) { ArrayList<UserId> details=new ArrayList

我现在正在学习java。在使用
Iterator
编写遍历
ArrayList
的代码时,我必须先使用类名,然后才能将迭代器的对象与
next()
函数一起使用。有人能帮我吗

import java.util.*;

public class arraylistwithuserdefinedclass {
    public static void main(String[] args) {    
        ArrayList<UserId> details=new ArrayList<UserId>();
        UserId a=  new UserId(22,"gurmeet");    
        UserId b=  new UserId(24,"sukhmeet");
        details.add(a);
        details.add(b);
        Iterator itr = details.iterator();
        while(itr.hasNext()) {    
            UserId ui = (UserId) itr.next();
            System.out.println(ui.age +" " + "" + ui.name) ;
        }
    }       
}

class UserId {
    int age;
    String name;
    UserId(int a, String b) {
        age=a;
        name=b;
    }
}
import java.util.*;
带有用户定义类的公共类ArrayList{
公共静态void main(字符串[]args){
ArrayList details=新的ArrayList();
UserId a=新的UserId(22,“gurmete”);
UserId b=新的UserId(24,“sukhmeet”);
详情.加入(a);
详情.加入(b);
迭代器itr=details.Iterator();
而(itr.hasNext()){
UserId ui=(UserId)itr.next();
System.out.println(ui.age++++++ui.name);
}
}       
}
类用户ID{
智力年龄;
字符串名;
用户ID(int a,字符串b){
年龄=a;
name=b;
}
}

必须为迭代器指定泛型类型,因为如果没有此类型,迭代器将保存类型对象:

Iterator itr = details.iterator();// This holds type Object.
为此,需要投射每个对象


另一个:

it.next()返回下一个对象。如果正在访问一个泛型列表,迭代器将返回该列表类型的内容。 前泛型Java迭代器总是返回类型对象,因此 通常是需要的


如果设置迭代器的类型,则不需要:

Iterator<UserId> itr = details.iterator();
//         ^^--------------------------

使迭代器
UserId
类型(指定类型),即

Iterator itr=details.Iterator();

因为如果不指定类型,它将如何理解返回的内容。因此,出于一般目的,它将返回对象类型,这就是需要向下转换的原因。

您的迭代器声明为原始,这就是您需要转换的原因,请将迭代器声明为用户ID执行
迭代器

Iterator itr=details.Iterator();
while(itr.hasNext()){
...
UserId ui=(UserId)

是的,我收到了这个警告**迭代器是一个原始类型。对泛型类型迭代器的引用应该参数化**。但是raw在这里的意思是什么。请告诉我如何消除这个问题。raw的意思是它没有类型。答案就在这里…do Iterator代替Iteratorraw意味着你没有提供类型参数。想想m是一个动态类型。如果我使用它而不强制转换,那么它会显示出一个错误,我无法编译我的代码。你必须使用我已经提到的
迭代器
,而不是只使用
迭代器
@gurmeetsigh检查我的编辑@gurmeetsigh你现在会了解更多谢谢你澄清了我的概念。什么是强制转换?你熟悉吗Javano中基本数据类型的加宽和加宽我不熟悉itCasting加宽和加宽
while (itr.hasNext()) {
    UserId ui = itr.next();
//-------------^
Iterator<UserId> itr = details.iterator();
Iterator<UserId> itr = details.iterator();
    while(itr.hasNext()) {
        ...
        UserId ui = (UserId)