簡體   English   中英

使用gson反序列化時,將TypeToken轉換為Type時出錯

[英]Error casting TypeToken to Type when deserializing with gson

我有一個類使用此函數反序列化泛型的ArrayList,正如此線程的第一個答案所述: Java抽象類函數泛型類型

public <T> ArrayList<T> arrayType(String data){
    return g.fromJson(data,   TypeToken.get(new ArrayList<T>().getClass()));
}

Eclipse要求我強制轉換TypeToken導致這個(函數fromJson需要一個Type,而不是TypeToken)

public <T> ArrayList<T> arrayType(String data){
    return g.fromJson(data,  (Type) TypeToken.get(new ArrayList<T>().getClass()));
}

結果我得到這個錯誤:

java.lang.ClassCastException: com.google.gson.reflect.TypeToken cannot be cast to java.lang.reflect.Type

gson用戶手冊中,他們告訴您這是調用該函數的正確方法

Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
Collection<Integer> ints2 = gson.fromJson(json, collectionType);

我無法看到我做錯了什么(如果這是一個有效的答案,為什么我得到這個演員錯誤?)

那么你正在調用TypeToken.get ,它返回一個TypeToken - 而不是一個Type 在示例中,您顯示哪些有效,它使用TypeToken.getType() ,它返回一個Type

所以你可以使用:

return g.fromJson(data, TypeToken.get(new ArrayList<T>().getClass()).getType());

......那會給你一個Type ,但它可能不是你真正想要的。 特別是,由於類型擦除,無論您從呼叫站點指定T ,都會返回相同的類型。 如果你希望類型真正反映ArrayList<T> ,你需要將類傳遞給方法,雖然我不完全確定從那里去哪里。 (根據我的經驗,Java反射API在泛型方面並不十分清楚。)

arrayType說一句,我希望一個名為arrayType的方法與數組有關 ,而不是ArrayList

暫無
暫無

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

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