![](/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.