java中哈希表的String-Object不匹配

时间:2015-01-04 10:45:42

标签: java hashtable type-mismatch

我的哈希表有问题。我在方法中使用的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
                }                   
            }

2 个答案:

答案 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;

来修复它