簡體   English   中英

如何在Java中為gson在運行時確定對象的類型

[英]How to determine the Type of an object at runtime in Java for gson

看下面的代碼,它可以正常工作:

        MyData myData = new MyData(1, "one");
    MyData myData2 = new MyData(2, "two");
    MyData [] data = {myData, myData2};

    String toJson = gson.toJson(data, MyData[].class);

    MyData [] newData = gson.fromJson(toJson, MyData[].class);

MyData只是一個具有int和String字段的簡單類。 這工作得很好。 但是,如果直到運行時才知道該類怎么辦? 例如,它可能不是“ MyData”,但可能是完全不同的類。 我們唯一知道的是類的名稱(表示為字符串),該名稱先前由發送方使用Class.forName確定。

如果對象不是數組,則可以正常工作,如下所示:

    final Class<?> componentType = Class.forName(componentClassName);
context.deserialize(someElement, componentType);

上面的技術雖然不適用於數組。

有什么建議么?

在Java中,您可以通過調用獲取對象的類

object.getClass();

從Java文檔:

class Test {
    public static void main(String[] args) {
        int[] ia = new int[3];
        System.out.println(ia.getClass());
        System.out.println(ia.getClass().getSuperclass());
    }
}

打印:

class [I
class java.lang.Object

您是說MyData成為通用類型T嗎? 如果是這樣,由於Java類型擦除,您將無法執行此操作。 類型T僅在編譯時可用。

您可以創建如下方法:

public T decodeJSON(String json, Class<T> type) {
    GSON gson = new GSON();
    return gson.fromJson(json, type);
}
String toJson = gson.toJson(Class.forName(obj, runtimeClassName + "[]"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM