簡體   English   中英

Java泛型,創建一個類的實例<T>

[英]Java Generics, Create an instance of Class<T>

我正在嘗試編寫一個通用方法來將 json 反序列化到我的模型中。 我的問題是我不知道如何從泛型類型 T 中獲取 Class。我的代碼看起來像這樣(並且不會以這種方式編譯)

public class JsonHelper {

    public <T> T Deserialize(String json)
    {
        Gson gson = new Gson();

        return gson.fromJson(json, Class<T>);
    }
}

我嘗試了其他方法來獲取類型,但它拋出了一個錯誤我將類設置為JsonHelper<T>然后嘗試了這個

Class<T> persistentClass = (Class<T>) ((ParameterizedType)getClass()
    .getGenericSuperclass())
    .getActualTypeArguments()[0];

方法簽名看起來像這樣

com.google.gson.Gson.fromJson(String json, Class<T> classOfT)

那么,當我調用JsonHelper.Deserialize<MyObject>(json);時,我該如何沿 T 進行翻譯JsonHelper.Deserialize<MyObject>(json); 我得到了正確對象的實例?

您需要從某個地方獲取Class實例。 也就是說,您的Deserialize()方法需要將Class<T>作為參數,就像底層的fromJson()方法一樣。

你的方法簽名應該看起來像 Gson 的:

<T> T Deserialize(String json, Class<T> type) ...

您的電話將如下所示:

MyObject obj = helper.Deserialize(json, MyObject.class);

順便說一下,以小寫字母開頭的方法名的約定在 Java 中已經很好地建立了。

不幸的是,Java 處理泛型的方式,你不能像你問的那樣得到這個類。 這就是為什么 Google 的東西專門要求將類作為參數的原因。 您必須修改您的方法簽名才能做到這一點。

暫無
暫無

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

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