используя экземпляр в коллекции - PullRequest
1 голос
/ 04 декабря 2011

Я должен прочитать двоичный файл.Я должен прочитать два типа объекта "Компания" и "Человек".Эти объекты представлены двумя классами: Компания и Персона.Эти классы являются производными от пользовательских классов.Когда я читаю этот файл, я помещаю два объекта «Компания» и «Человек» в два разных 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 ]

3 голосов
/ 04 декабря 2011

Что я мог понять из этого вопроса, так это то, что логика чтения будет иметь тип возвращаемого значения 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

    }
3 голосов
/ 04 декабря 2011

Попробуйте что-то вроде этого:

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 голос
/ 04 декабря 2011

Полагаю, вы говорите о сериализации, используя классы ObjectOutputStream и ObjectInputStream.

Метод readObject () возвращает объект.Чтобы узнать, какой тип объекта вы можете использовать instanceof:

Object o = ois.readObject();
if (o instanceof Person)
{
     Person p = (Person) o;
     persons.put(p.name, p)
}
// Same for company
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...