content: package com.alibaba.json.bvt.typeRef;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.TypeReference;
  import com.alibaba.fastjson.annotation.JSONField;
  import junit.framework.TestCase;
  
  /**
   * Created by wenshao on 09/02/2017.
   */
  public class TypeReferenceTest13 extends TestCase {
      public void test_typeRef() throws Exception {
          String json = "{\"result\":{}}";
          for (int i = 0; i < 100; ++i) {
              {
                  SearchResult<ResultItem, CountFacet> searchResult = parseSearchResult(
                          json, ResultItem.class, CountFacet.class);
              }
              {
                  SearchResult<ResultItem1, CountFacet1> searchResult = parseSearchResult(
                          json, ResultItem1.class, CountFacet1.class);
              }
          }
      }
  
      public static <I, F> SearchResult<I, F> parseSearchResult(String resultStr, Class<I> itemType,
                                                                Class<F> facetType) {
          SearchResult<I, F> searchResult = JSON.parseObject(resultStr, new TypeReference<SearchResult<I, F>>() {
          });
  
          return searchResult;
      }
  
      public static class ResultItem {
  
      }
  
      public static class CountFacet {
  
      }
  
      public static class ResultItem1 {
  
      }
  
      public static class CountFacet1 {
  
      }
  
      public static class SearchResult<I, F> extends BaseResult {
  
          /**
           * 大的结果对象，包含结果数据、耗时、数量统计等信息
           */
          @JSONField(name = "result")
          private ResultDO<I, F> result;
  
          /**
           * 目前没有用到
           */
          @JSONField(name = "tracer")
          private String         tracer;
  
          public String getTracer() {
              return tracer;
          }
  
          public void setTracer(String tracer) {
              this.tracer = tracer;
          }
  
          public ResultDO<I, F> getResult() {
              return result;
          }
  
          public void setResult(ResultDO<I, F> result) {
              this.result = result;
          }
      }
  
      public static class BaseResult {
  
      }
  
      public static class ResultDO<I, F> {
  
      }
  }
  