概要 借助对TypeToken原理的分析,加强对泛型擦除的理解,使得我们能够知道什么时候,通过什么方式可以获取到泛型的类型。 TypeToken 使用 使用过Gson的同学都知道在反序列化时需要定义一个TypeToken类型,像这样 private Type type = new TypeToken<List<Map<String 大家都知道,在Java语法中,在这个语境,{}是用来定义匿名类,这个匿名类是继承了TypeToken类,它是TypeToken的子类。 为什么要通过子类来获取泛型的类型? 这是TypeToken能够获取到泛型类型的关键,这是一个巧妙的方法。 我们看看TypeToken的getType方法 public final Type getType() { //直接返回type return type; } 看type的初始化 //注意这里用了
项目中代码: List<AppVersion> redisList = new Gson().fromJson(json, new TypeToken<List<AppVersion>>(){}.getType new TypeToken<List<AppVersion>>(){}.getType() ,这个位置要的参数是一个Type,表示是xxx类型,但是Type是个接口,如下: public interface TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。 先调用TypeToken<T>的构造器得到匿名内部类,再由该匿名内部类对象调用getType()方法得到要转换成的type, 在此就是得到的type就是列表类型:List<AppVersion>类型。 new TypeToken<List<AppVersion>>(){}.getType() 就是说要把Json数据转换成List<AppVersion>类型的结果。 4.
作者 | Alben 来源 | http://r6d.cn/UeXQ 概要 借助对TypeToken原理的分析,加强对泛型擦除的理解,使得我们能够知道什么时候,通过什么方式可以获取到泛型的类型。 TypeToken 使用 使用过Gson的同学都知道在反序列化时需要定义一个TypeToken类型,像这样 private Type type = new TypeToken<List<Map<String 大家都知道,在Java语法中,在这个语境,{}是用来定义匿名类,这个匿名类是继承了TypeToken类,它是TypeToken的子类。 为什么要通过子类来获取泛型的类型? 这是TypeToken能够获取到泛型类型的关键,这是一个巧妙的方法。 protected关键字,限制了只有子类才能访问 protected TypeToken() { this.type = getSuperclassTypeParameter(getClass(
需求说明 如果要动态构造一个泛型参数对象(ParameterizedType),guava提供的TypeToken工具可以部分实现这个功能: 比如下面这个例子(来自guava wiki TypeToken static <K, V> TypeToken<Map<K, V>> mapToken(TypeToken<K> keyToken, TypeToken<V> valueToken) { // where TypeToken<Map<String, BigInteger>> mapToken = mapToken( TypeToken.of(String.class), TypeToken.of (BigInteger.class)); TypeToken<Map<Integer, Queue<String>>> complexToken = mapToken( TypeToken.of( 完整代码如下(中文注释部分是我增加的方法),代码中用到了guava中的TypeToken工具类实现,只是为了少写些代码。
static void saveService(Person p, String name) throws IOException { Type type = new TypeToken = typeToken; insert(atForm); } static void realService "; atForm.json = "{\"name\":\"Honey\",\"age\":26}"; Type type = new TypeToken = baos.toString(); atForm.typeToken = typeToken; return atForm; 1; } static class AtForm { Long id; String typeToken
* @return */ public static <T> T fromJsonDefault(String json, TypeToken<T> typeToken) { Gson gson = new Gson(); return gson.fromJson(json, typeToken.getType()); } /** * json 字符串转list或者map * * @param json * @param typeToken * @return */ public static <T > T fromJson(String json, TypeToken<T> typeToken) { Gson gson = new GsonBuilder() }.getType(), new MapTypeAdapter()).create(); return gson.fromJson(json, typeToken.getType());
5f0ff0a5bc8da837cbd8aef7.html package com.kuaidi100.sdk.api; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken StringUtils.isNotBlank(httpResult.getBody())){ return new Gson().fromJson(httpResult.getBody(),new TypeToken StringUtils.isNotBlank(httpResult.getBody())){ return new Gson().fromJson(httpResult.getBody(),new TypeToken StringUtils.isNotBlank(httpResult.getBody())){ return new Gson().fromJson(httpResult.getBody(),new TypeToken StringUtils.isNotBlank(httpResult.getBody())){ return new Gson().fromJson(httpResult.getBody(),new TypeToken
}}", User::class.java) //2、反序列化List<User>对象,其它带有泛型的类,皆可用此方法序列化 val type = object : TypeToken<List<User }]", type) 以上写法,是Java的语法翻译过来的,它有一个缺点,那就是泛型的传递必须要通过另一个类去实现,上面我们借助类TypeToken类,相信这一点,很多人都不能接受,于是乎,在Kotlin 好办,我们借助TypeToken类传递泛型即可,而这次,我们仅需要在方法内部写一次即可,如下: inline fun <reified T> fromJson(json: String): T? { return try { //借助TypeToken类获取具体的泛型类型 val type = object : TypeToken<T>() {}.type { return try { val type = object : TypeToken<T>() {}.type return Gson().fromJson(
创建 TypeAdapter public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { Type type = typeToken.getType(); // 检查是否为列表类型 Class<? ConstructorConstructor.java public <T> ObjectConstructor<T> get(TypeToken<T> typeToken) { final Type type = typeToken.getType(); final Class<? TypeToken.java protected TypeToken() { this.type = getSuperclassTypeParameter(getClass()); this.rawType
@Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { Class<T> rawType = (Class<T>) typeToken.getRawType(); if (Params.class.isAssignableFrom(rawType)) { return ParamsAdapterFactory implements TypeAdapterFactory { @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken <T> typeToken) { Class<T> rawType = (Class<T>) typeToken.getRawType(); if (Params.class.isAssignableFrom
java.util.List; import java.util.Scanner; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken ){ //如果是3,表明有新用户登录 Gson g=new Gson(); Type type=new TypeToken 对象,向Gson来说明这个泛型类的构成 Gson g=new Gson(); Type type=new TypeToken<JsonModel 对象,向Gson来说明这个泛型类的构成 Gson g=new Gson(); Type type=new TypeToken<JsonModel 对象,向Gson来说明这个泛型类的构成 Gson g=new Gson(); Type type=new TypeToken
2.用 TypeToken 转一下: Gson gson = new Gson(); String result = response; ArrayList<Student> list = new ArrayList <Student>(); Type listType = new TypeToken<List<Student>>() {}.getType(); list = gson.fromJson(result
import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken null; try { Gson gson = new Gson(); res = gson.fromJson(str_json, new TypeToken
.*; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; import java.util.List; import = null) { list = gson.fromJson(gsonString, new TypeToken<ArrayList<T>>() { }. = null) { map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() { }
toJson fromJson是json转其他 toJson是其他转json import com.google.gson.Gson; import com.google.gson.reflect.TypeToken jsonString1"+jsonString1); //json转list List<User> users1 = gson.fromJson(jsonString1, new TypeToken jsonString2"+jsonString2); //json转map Map<String,User> map1 = gson.fromJson(jsonString2, new TypeToken
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.reflect.TypeToken jsonObject.toJavaObject(Item.class); System.out.println("item2=" + item2.toString()); Type type = new TypeToken import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.reflect.TypeToken jsonObject.toJavaObject(Item.class); System.out.println("item2=" + item2.toString()); Type type = new TypeToken
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.reflect.TypeToken try { MQReceiveCLevelRiskControlDTO cLevelRiskControlDTO = GsonUtils.convert(msg, new TypeToken MQReceiveCLevelRiskControlDTO cLevelRiskControlDTO = GsonUtils.convert("{"+msg+"}", new TypeToken
Json 到 JsonElements 的解析树 JsonElement 类:一个类代表的 Json 元素 JsonObject 类:Json 对象类型 JsonArray 类:JsonObject 数组 TypeToken \"栗筝i\"},{\"id\":\"2\",\"name\":\"栗筝ii\"}]"; // 将 Json 转换成 List List list = gson.fromJson(json, new TypeToken <LIST>() {}.getType()); // 将 Json 转换成 Set Set set = gson.fromJson(json, new TypeToken<SET>() {}.getType = new GsonBuilder().disableHtmlEscaping().setExclusionStrategies(strategy).registerTypeAdapter(new TypeToken List<Map<String,Object>> jsonStr2ListMap(String jsonStr){ return gson.fromJson(jsonStr, new TypeToken
Gson gson = new Gson(); List<Bean> beanList = (List<Bean>)gson .fromJson(json字符串, new TypeToken = getJson(MainActivity.this, fileName); //json转换为集合 return new Gson().fromJson(myjson, new TypeToken
new PersonListType().getType()); List<Person> list2 = gson.fromJson(listJsonString, new TypeToken 返回Class类型 // 如果要返回一个集合,要使用TypeToken类 Map<String, Person> map2 = gson.fromJson(mapJsonString, new TypeToken<HashMap<String, Person>>(){}.getType()); System.out.println( map2 ); Person p = System.out.println("Map集合转json:"+gString); Map<String, Person> map2 = gson.fromJson(gString,new TypeToken