繁体   English   中英

为什么 ObjectOutputStream.readObject() 返回 Object 类型的对象而不是我编写它的类型的对象?

[英]Why does ObjectOutputStream.readObject() return object of type Object and not object of type I wrote it in?

说我有课Car

class Car implements Serializable{
    String color;
    
    public Car(String color) {
        this.color = color;
    }
}

现在我想将Car类的对象写入ObjectStream 所以它看起来像这样:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.dat"));
oos.writeObject(new Car("yellow"));

然后当然我想阅读对象 所以我需要这样做:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.dat"));
Car car = (Car)ois.readObject();

我的问题如下:为什么方法readObject()返回Object而不是Car 我的文件obj.dat不是存储有关它所持有对象的所有信息吗? 所以毫无疑问它知道我想要读取的对象Car类型。 那么为什么它不简单地返回Car ,这样我就不必进行任何转换

因为它无法知道文件/序列化数据中的对象类型。

在这种情况下,它确实返回了Car

但是编译器在编译时无法知道,因为它取决于obj.dat的数据。

所以编译器必须假设一般情况。 它唯一确定的是readObject()将返回一些Object

如果您知道它将始终如此,您可以将其转换为更具体的类型,就像您所做的那样。

或者反过来想:如果在同一个文件中依次序列化Car对象和Bike对象,则调用readObject()两次应该返回这两种类型。

现在该方法的返回类型是静态定义的,因此在 Java 类型系统中,第一次调用无法指示与第二次调用不同的返回类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM