我正在尝试做什么,而且我不知道这是否可行,是获取对象的类类型,然后在声明中使用它。我正在使用Gson库进行Json转换,我想创建一个方法,可以采用任何对象Arraylist类型并将其转换为JsonArray。我下面的代码是代码。 X类型的Arraylist将被转换为Object类型,并传递给下面的方法。 INSERT_CLASS_HERE应该是基于Object类型的动态。
public static JsonArray getJsonArray(List<Object> list , Class theClass){
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(list, new TypeToken<List<INSERT_CLASS_TYPE_HERE>>() {}.getType());
if (! element.isJsonArray()) {
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
JsonArray jsonArray = element.getAsJsonArray();
return jsonArray;
}
我尝试的是以下内容,但这不是正确的语法并且会抛出错误
public static JsonArray getJsonArray(List<Object> list , Class theClass){
if(list.size() == 0) return null;
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(list, new TypeToken<List<theClass>>() {}.getType());
if (! element.isJsonArray()) {
// fail appropriately
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
JsonArray jsonArray = element.getAsJsonArray();
return jsonArray;
}
1)这可能吗,如果没有,为什么不呢? 2)如果不是,怎么能实现呢?
谢谢!
答案 0 :(得分:1)
您尝试做的似乎是Java generics。
使用泛型这应该相当简单:
public static <T> JsonArray getJsonArray(List<T> list){
if(list.size() == 0) return null;
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(list, new TypeToken<List<T>>() {}.getType());
//Not familiar with gson, but you might be able to just use T here instead
答案 1 :(得分:1)
为什么要传递类型值?这不应该是必需的。
<?php
if($row['utilities'] == 'Gym')
{
?>
<input type="checkbox" value="Gym" id="details_10" name="utilities[]" checked="checked">
<?php
}
else
{
?>
<input type="checkbox" value="Gym" id="details_10" name="utilities[]">
<?php
}
?>
最好还是避免施法你可以做以下
public static JsonArray getJsonArray(List<Object> list){
if(list.size() == 0) return null;
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(list);
JsonArray jsonArray = element.getAsJsonArray();
return jsonArray;
}
答案 2 :(得分:-1)
尝试修改方法签名,如下所示:
public static <T> JsonArray getJsonArray(List<Object> list, Class<T> theClass )
然后你应该能够这样做:
new TypeToken<List<T>>