java:利⽤fastjson判断⼀个类型(flect.Type)。。。
明天的英语fastjson中JSON(Object javaObject)⽅法将⼀个java对象被序列化成json对象时,返回的对象类型有三种可
做风筝的过程能:JSONObject,JSONArray,原始类型(简单类型)。
强迫症能治好吗最近在使⽤fastjson进⾏对java对象序列化和反序列化时,遇到⼀个问题:
层见叠出需要判断⼀个类型(flect.Type)是否为⼀个java bean(这⾥所说的java bean并⾮完全符合JavaBean规范的类型,只要不是简单类型、Map、Collection、Array,能被fastjson序列化为JSONObject对象⽽不是JSONArray或简单类型就算),如果要⾃⼰实现这个代码还是挺复杂的,需要⼀⼤堆的类型判断。
研究了fastjson的代码之后,发现它也有这个判断需求(实现代码近200⾏,好复杂)。在fastjson的基础上实现这个判断就很⽅便了。
原理很简单 ,com.alibaba.fastjson.parr.ParrConfig类中有⼀个getDerializer(Type)⽅法⽤于根据Type返回相应的反序列化器(Derializer),如果返回的对象类型是JavaBeanDerializer,这个Type肯定是个java bean对象。
待人接物
如下代码:
import flect.Type;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parr.ParrConfig;
import com.alibaba.fastjson.parr.derializer.JavaBeanDerializer;
public class TypeUtils{
public static final boolean isJavaBean(Type type){
if(null == type )
可使足民throw new NullPointerException();
// 根据 getDerializer 返回值类型判断是否为 java bean 类型孕妇可以吃肉松吗
return Derializer(type) instanceof JavaBeanDerializer;
}
}
小标题格式