【发布时间】:2017-05-17 09:25:43
【问题描述】:
我的程序有以下代码:
List<HashMap<String,SampleClass>> listVariable=new Gson().fromJson(data.getStringData(),new TypeToken<List<HashMap<String,SampleClass>>>(){}.getType());
我可以使用
Gson gson=new Gson();
String jsonData=data.getStringData();
Type tt=new TypeToken<List<HashMap<String,SampleClass>>>(){}.getType();
List<HashMap<String,SampleClass>> listVariable=gson.fromJson(jsonData,tt);
两个问题:
- 它们的性能比较如何?
- 有什么方法可以将冗长的类型(
List<HashMap<String,SampleClass>>)保存到一个变量中,并在我需要它作为类型的任何地方使用它?
【问题讨论】:
-
你的标题毫无意义。一个是field,另一个是class。要求比较苹果和汽车是没有意义的。
-
1.不太可能你会看到任何不同。 2. 当然,将
TypeReference保存在您喜欢的任何地方。 -
@shmosel 我相信 OP 要求与 C
typedef等效的 Java,因此您可以为长类型声明分配一个短类型名,例如typedef MyList List<HashMap<String,SampleClass>>这样您就可以使用MyList listVariable=gson.fromJson(jsonData,tt);。答案是 Java 没有。 -
由于 JVM 仍然需要创建相同的实例并将引用保存在某处(只是不提供给您),因此差异将很小。两者仍在使用实例。只有一个是内联的,没有声明。
-
长度本身并不是一件坏事。您期望通过键入更少的击键获得什么工程优势?请记住,在声明中包含类型信息会增加可读性,因为维护者无需四处寻找“typedef”的含义。马上就知道泛型断言是什么。你真的不应该把类型断言扫到地毯下,因为它们记录了有价值的类型关系并强制执行它们。
标签: java json collections gson