我的哈希表有问题。我在方法中使用的for循环正常工作,但是main中的相同循环给出了(不能将String转换为Object)错误。如果不匹配,为什么我的方法不会出错?
我将写下hashlist对象的声明。主循环和方法
声明:
private static Hashtable hashlist2;
hashlist2 = new Hashtable<String,Course>();
方法:
private static void printmap(Hashtable<String,Course> hashlist, LinkedList<Course> list){
for(String courses : hashlist.keySet()){
hashlist.get(courses).print();
}
我在main中使用的for循环:
for(String courses : hashlist2.keySet()){//mismatch occurs here
if(courses.equals(coursecode)){
((Course) hashlist2.get(courses)).print();
check=true;//means "yeah we find a course"
break;//and break there no more loop needed
}
}
答案 0 :(得分:0)
更改
private static Hashtable hashlist2;
hashlist2 = new Hashtable<String,Course>()
到
private static Hashtable<String,Course> hashlist2;
hashlist2 = new Hashtable<String,Course>()
当您使用原始类型Hashtable
时,编译器不知道键的类型为String
,因此for(String courses : hashlist2.keySet())
无法通过编译。对于原始Hashtable
,假定键的类型为Object
。
答案 1 :(得分:0)
因为传递给printmap
的参数属于Hashtable<String,Course> hashlist
类型,而main
中您声明private static Hashtable hashlist2; hashlist2 = new Hashtable();
这是非通用版本(这就是为什么当你在for循环中迭代你得到的对象而不是String),你可以通过private static Hashtable<String,Course> hashlist2;