获取对象的类类型并在变量声明中使用它

时间:2015-08-05 15:42:23

标签: java

我正在尝试做什么,而且我不知道这是否可行,是获取对象的类类型,然后在声明中使用它。我正在使用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)如果不是,怎么能实现呢?

谢谢!

3 个答案:

答案 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>>