说我上课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 。那么,为什么它不只是返回,这样我就不必进行任何转换?Car
Car
在这种情况下,它确实会返回一个Car
。
但是编译器在编译时不知道这一点,因为它取决于中的数据obj.dat
。
因此,编译器必须承担一般情况。它唯一确定的唯一知道就是readObject()
会返回一些Object
。
如果您知道它永远都是那样,则可以将其转换为更特定的类型,就像您所做的那样。
或以另一种方式考虑:如果将一个Car
对象和一个Bike
对象彼此序列化在同一文件中,则readObject()
两次调用应返回这两种类型。
现在,该方法的返回类型是静态定义的,因此在Java类型系统中,第一次调用无法指示与第二次调用不同的返回类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句