kotlingson反序列化默認(rèn)值失效深入講解-創(chuàng)新互聯(lián)

Gson反序列化原理

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、任縣網(wǎng)絡(luò)推廣、小程序設(shè)計、任縣網(wǎng)絡(luò)營銷、任縣企業(yè)策劃、任縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供任縣建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn

原理簡述


gson反序列化主要分為兩個過程:

  • 根據(jù)TypeToken創(chuàng)建出對象
  • 根據(jù)json字符串解析數(shù)據(jù),對對象屬性賦值

對象的創(chuàng)建


ConstructorConstructor.get

  • 先嘗試獲取無參構(gòu)造函數(shù)
  • 失敗則嘗試List、Map等情況的構(gòu)造函數(shù)
  • 最后使用Unsafe.newInstance兜底(此兜底不會調(diào)用構(gòu)造函數(shù),導(dǎo)致所有對象初始化代碼不會調(diào)用)
public <T> ObjectConstructor<T> get(TypeToken<T> typeToken) {
 final Type type = typeToken.getType();
 final Class<? super T> rawType = typeToken.getRawType();

 // first try an instance creator

 @SuppressWarnings("unchecked") // types must agree
 final InstanceCreator<T> typeCreator = (InstanceCreator<T>) instanceCreators.get(type);
 if (typeCreator != null) {
  return new ObjectConstructor<T>() {
  @Override public T construct() {
   return typeCreator.createInstance(type);
  }
  };
 }

 // Next try raw type match for instance creators
 @SuppressWarnings("unchecked") // types must agree
 final InstanceCreator<T> rawTypeCreator =
  (InstanceCreator<T>) instanceCreators.get(rawType);
 if (rawTypeCreator != null) {
  return new ObjectConstructor<T>() {
  @Override public T construct() {
   return rawTypeCreator.createInstance(type);
  }
  };
 }
 // 獲取無參構(gòu)造函數(shù)
 ObjectConstructor<T> defaultConstructor = newDefaultConstructor(rawType);
 if (defaultConstructor != null) {
  return defaultConstructor;
 }

 // 獲取List<T>,Map<T>等構(gòu)造函數(shù),對于List,Map的情況
 ObjectConstructor<T> defaultImplementation = newDefaultImplementationConstructor(type, rawType);
 if (defaultImplementation != null) {
  return defaultImplementation;
 }

 // unSafe構(gòu)造出對象,不調(diào)用任何的構(gòu)造函數(shù)
 // finally try unsafe
 return newUnsafeAllocator(type, rawType);
 }

網(wǎng)頁題目:kotlingson反序列化默認(rèn)值失效深入講解-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/article30/dejipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)小程序開發(fā)、網(wǎng)站改版、網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化