![](/img/trans.png)
[英]Why does ObjectOutputStream.readObject() access MyClass.readObject()
[英]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.