fastjson处理嵌套泛型

返回
Author Avatar
钢翼
2020-01-22
编程
92

https://www.cnblogs.com/liqipeng/p/9148545.html

java由于泛型擦除,使用泛型并不像C#那么方便,作为一个好的架构,只能退而求其次,通过定义每个泛型类型的派生类来封装减少代码量。虽然还是会比C#的代码量大很多。

目前的方法是:

  1. 定义获取实际类型的接口

public interface IA<T> {
    /**
     * 获取泛型类型
     * @return
     */
    Type GetGenericArgument();
}

2.定义抽象泛型继承接口,不实现GetGenericArgument

public abstract class A<T> implements IA{
  @Override
  public abstract Type GetGenericArgument();
}

3.定义子类继承具体泛型

public class B extends A<B1>{
    @Override
  public Type GetGenericArgument(){
    return B.class
  }
}
public class C extends A<C1>{
    @Override
  public Type GetGenericArgument(){
    return C.class
  }
}

4.嵌套泛型时使用GetGenericArgument()方法进行反序列化

public <T> T doSomething(A<T> c,String  json){
   var obj = JSONObject.parseObject(json,new TypeReference<A<T>>(c.GetGenericArgument()));
   ...
}