package com.alibaba.fastjson.parser.deserializer; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashSet; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.JSONToken; public class ArrayListTypeDeserializer implements ObjectDeserializer { private Type itemType; private Class<?> rawClass; public ArrayListTypeDeserializer(Class<?> rawClass, Type itemType) { this.rawClass = rawClass; this.itemType = itemType; } @SuppressWarnings({"unchecked", "rawtypes"}) public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { Collection list = null; if (parser.getLexer().token() == JSONToken.NULL) { parser.getLexer().nextToken(); } else { if (rawClass.isAssignableFrom(LinkedHashSet.class)) { list = new LinkedHashSet(); } else if (rawClass.isAssignableFrom(HashSet.class)) { list = new HashSet(); } else { list = new ArrayList(); } parser.parseArray(itemType, list, fieldName); } return (T) list; } public int getFastMatchToken() { return JSONToken.LBRACKET; } }