Java 为什么在while循环中使用iTerator对象时需要类型转换?
我现在正在学习java。在使用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
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)