簡體   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