java匿名類序列化問題

Pagination已經繼承Serializable,並且具有如下兩個屬性
private int page;
    private int pageSize;
變量Integer pageNo, Integer pageSize
然而在duboo服務中如下的寫法會造成序列化錯誤

Pagination  pagination =
                new Pagination() {{
                    setPage(pageNo);
                    setPageSize(pageSize);
                }};

但是正常的set賦值則不會發生序列化錯誤。

產生這個問題的核心在於java雙括號用法的機制

第一層括號定義一個內部匿名類,第二層括號時一個設立初始化塊。

因爲雙括號的在產生的時內部匿名類對象,在執行序列化時會執行構造匿名對象,那麼會存在一個拆箱轉化的過程,正常來說不應該有問題,賦值,然後序列化。但是匿名內部類的對象會伴隨主對象的整個生命週期,並且匿名類必然不會繼承序列化接口支持序列化,所以在執行序列化時會發生無法序列化外部類的情況,因爲匿名類對象也是一個需要序列化的成員。

發佈了181 篇原創文章 · 獲贊 21 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章