1. 程式人生 > >java匿名類序列化問題

java匿名類序列化問題

Pagination已經繼承Serializable,並且具有如下兩個屬性
private int page;
    private int pageSize;
變數Integer pageNo, Integer pageSize
然而在duboo服務中如下的寫法會造成序列化錯誤
Pagination  pagination =
                new Pagination() {{
                    setPage(pageNo);
                    setPageSize(pageSize);
                }};

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

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

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

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