亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回未知類型

返回未知類型

慕哥9229398 2021-06-07 15:17:33
目前我正在嘗試編寫一個返回未知對象類型(序列化)的方法。但是,我不斷收到來自 java 的錯誤,要求我提供一個類型 - 但顯然,我不知道反序列化對象的具體類型是什么。這是代碼:public static <?> T deSerialize(String path) throws IOException {//Line in question    try {        ObjectInputStream o = new ObjectInputStream(new FileInputStream(path));        return o.readObject();    }catch(Exception e) {        e.printStackTrace();    }    return null;}我知道我可以簡單地返回 type object,但我想知道如何使用泛型來做到這一點。謝謝你的幫助
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

中的readObject方法ObjectInputStream返回Object對正確類型的引用。


從 ObjectInputStream 中讀取一個對象。讀取對象的類、類的簽名以及類及其所有超類型的非瞬態和非靜態字段的值。


...


應該使用 Java 的安全轉換來獲得所需的類型。


因此,當您調用該方法時,您應該讓調用者將其轉換為正確的類型。


// Non-generic method.

public static Object deSerialize(String path) throws IOException {


// ...

YourType foo = (YourType) deSerialize(path);

如果必須使其泛型,則必須有一個類型見證 a Class,它可以為您執行動態類型轉換,以便編譯器在編譯時和運行時檢查類型Class.cast。仍然由調用者提供正確的Class.


public static <T> T deSerialize(String path, Class<T> clazz) throws IOException {

    try {

        ObjectInputStream o = new ObjectInputStream(new FileInputStream(path));


        return clazz.cast(o.readObject());

    }catch(Exception e) {

        e.printStackTrace();

    }

    return null;

}


查看完整回答
反對 回復 2021-06-10
  • 1 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號