我必须读取二进制文件。我必须阅读两种类型的对象“公司”和“人”。这些对象由两个类表示: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();
}
是不是?
答案 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