package com.alibaba.json.bvt.issue_3300;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import junit.framework.TestCase;
import org.junit.Test;
/**
* @author yumin.pym
* /
public class Issue3448 extends TestCase {
public static class SelfTypeReference<T> {
}
@Test
public void test() {
List<Map<String, List<String>>> list = new ArrayList<>(4);
list.add(Collections.singletonMap("key1", Collections.singletonList("item")));
String text = JSON.toJSONString(list);
System.out.println("text = " + text);
List<Map<String, List<String>>> result = parseObject(text,
new SelfTypeReference<Map<String, List<String>>>() {});
System.out.println("result = " + result);
}
public <T> List<T> parseObject(String text, SelfTypeReference<T> selfTypeReference) {
Type genericSuperclass = selfTypeReference.getClass().getGenericSuperclass();
Type[] actualTypeArguments = ((ParameterizedType)genericSuperclass).getActualTypeArguments();
return JSON.parseObject(text, new TypeReference<List<T>>(actualTypeArguments) {});
}
}
4条答案
按热度按时间7fyelxc51#
这里的reture返回里里层泛型的类型,应该去掉return在外层统一返回
com.alibaba.fastjson.TypeReference#handlerParameterizedType
8cdiaqws2#
你的这个修复方式在某种情况下有问题,如下test_parseList2所示,而我的改法是可以正确处理。
我的修改可以正确处理,如下所示:
t98cgbkg3#
大佬真的细心啊
ivqmmu1c4#
凭直觉,感觉你的修改有问题,但是得证明有问题。哈哈……