使用集合中的实例

时间:2011-12-03 23:16:42

标签: java collections

我必须读取二进制文件。我必须阅读两种类型的对象“公司”和“人”。这些对象由两个类表示:Company和Person。这些类派生自“用户”类。 当我读到这个文件时,我有两个将两个对象“Company”和“Person”放入两个不同的HashMap中。我的教授告诉我,我必须使用关键字instanceof,但我不明白如何使用它。

            try
    {
    ObjectInputStream reader=new ObjectInputStream(new FileInputStream(fname));

        while(reader.available()>0)
        {
            User obj=reader.readObject();
                            if(obj istanceOf Company)
                            ...
                else if(obj istanceOf Person)

                     }



    }
    catch(FileNotFoundException ffe)
    {
        System.err.println("Error: the file was not found!");
    }
    catch(IOException ioe)
    {
        ioe.printStackTrace();
    }

是不是?

3 个答案:

答案 0 :(得分:3)

尝试这样的事情:

if (obj instanceof Company) {
    Company company = (Company) obj;
    companies.put(someId, company);
} else if (obj instanceof Person) {
    Person person = (Person) obj;
    persons.put(someId, person);
}

在上面的代码中,obj是您从文件中读取的对象,假设您不知道其类型。此外,我假设您有Map个名为companies的公司和Map名为persons的公司,在任何一种情况下,您都必须拥有某种标识符(我将其称为someId),用作将对象存储在相应地图中的密钥。

答案 1 :(得分:3)

我从这个问题中可以理解的是,读取逻辑将具有返回类型User(Parent Class),因此为了弄清楚对象的实际类型,您必须编写以下逻辑,

// Assuming fsin is a FileInputStream object



   User obj = getObjectFromFile(fsin);

    if(obj instanceof Company)
    {
       // put obj to Company hashmap

    }
    else if(obj instanceof Person)
    {
       // put obj to Person hashmap

    }

答案 2 :(得分:1)

我猜你正在谈论序列化,使用ObjectOutputStream和ObjectInputStream类。

方法readObject()返回一个对象。要知道哪种对象可以使用'instanceof':

Object o = ois.readObject();
if (o instanceof Person)
{
     Person p = (Person) o;
     persons.put(p.name, p)
}
// Same for company