Pagination已經繼承Serializable,並且具有如下兩個屬性
private int page;
private int pageSize;
變量Integer pageNo, Integer pageSize然而在duboo服務中如下的寫法會造成序列化錯誤
Pagination pagination =
new Pagination() {{
setPage(pageNo);
setPageSize(pageSize);
}};
但是正常的set賦值則不會發生序列化錯誤。
產生這個問題的核心在於java雙括號用法的機制
第一層括號定義一個內部匿名類,第二層括號時一個設立初始化塊。
因爲雙括號的在產生的時內部匿名類對象,在執行序列化時會執行構造匿名對象,那麼會存在一個拆箱轉化的過程,正常來說不應該有問題,賦值,然後序列化。但是匿名內部類的對象會伴隨主對象的整個生命週期,並且匿名類必然不會繼承序列化接口支持序列化,所以在執行序列化時會發生無法序列化外部類的情況,因爲匿名類對象也是一個需要序列化的成員。