[英]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.