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

斯蒂芬:

说我上课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存储有关其保存的对象的所有信息吗?因此,毫无疑问,它知道我要读取的对象是type 那么,为什么它不只是返回,这样我就不必进行任何转换CarCar

约阿希姆·绍尔(Joachim Sauer):

在这种情况下,确实会返回一个Car

但是编译器在编译时不知道这一点,因为它取决于中的数据obj.dat

因此,编译器必须承担一般情况。它唯一确定的唯一知道就是readObject()会返回一些Object

如果您知道它永远都是那样,则可以将其转换为更特定的类型,就像您所做的那样。

或以另一种方式考虑:如果将一个Car对象和一个Bike对象彼此序列化在同一文件中,则readObject()两次调用应返回这两种类型。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章