2013-03-24 49 views
1

我的一個功能變得Type變量。有時它可能是java.util.List<Test$MyClass>java.util.List<java.lang.String>,那麼我如何識別它們?如何查詢android

if (type instanceof List) { 

} 

兩者都是列表類型但不同類型。所以上面的代碼不起作用。 我想區分兩種列表類型。

我的主要問題是https://stackoverflow.com/questions/15596112/implement-jsondeserializer-more-than-one-in-gson-in-android

我使用deserializer爲..

public class Data implements JsonDeserializer<ArrayList<MyClass1>> { 
public ArrayList<MyClass1> myList1 = new ArrayList<MyClass1>(); 
public ArrayList<MyClass2> myList2 = new ArrayList<MyClass2>(); 

@Override 
public ArrayList<MyClass1> deserialize(JsonElement json, Type type, 
     JsonDeserializationContext context) throws JsonParseException { 

    Debug.e("", type.toString()); 

    ArrayList<Layoutmap> data = new ArrayList<Layoutmap>(); 

    try { 
     if (json.isJsonObject()) { 

      // my stuff 

      return data; 
     } else { 
      return new Gson().fromJson(json, type); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return data; 
} 

}

上面的代碼工作爲public ArrayList<MyClass2> myList2 = new ArrayList<MyClass2>();myList2也是我想反序列化.. 它一部分的谷歌Gson

+0

你想在兩者之間進行區分列表類型? – tom 2013-03-24 11:54:56

+2

恕我直言,這表明一個設計問題。你不應該有一種方法有時返回某些東西,而有些時候則有其他東西。 – 2013-03-24 12:01:19

+0

同意JB Nizet。但如果你想比較每個元素出於某種原因,那麼你可以檢查我的答案。 – lokoko 2013-03-24 12:04:27

回答

0

我只是覺得我的解決方案。我不知道這是好還是不

我比較兩個Type變量是這樣的...

if (type.toString().equalsIgnoreCase(
       new TypeToken<List<Test.MyClass>>() { 
       }.getType().toString())) { 

}else 
{ 

} 
1

是的,問題是在Java中,針對不可確定類型的實例測試始終是錯誤。

例如:

if(o instance of List<E>) 

其中E是任意類型的,將不編譯。

您只需檢查列表中包含的內容是相同的類型,例如,

if(list1.get(0) instance of String && list2.get(0) instance of String) 

編輯:

不知道這裏有語言障礙的問題(你的問題很難完全理解),但你不應該需要讓你的方法採取類型類型的參數。正如別人提到的,你在這裏設計不好。你應該做的是簡單地定義如何反序列化你的每個類(如果需要定義自定義反序列化......就是說,如果默認值不起作用),然後以常規方式獲得這些列表GSON。

我不是超級熟悉GSON,但它應該是這樣的:

List<Class1> stuff = gson.fromJson(json, new TypeToken<List<Class1>>(){}.getType()); 

所以,換句話說,如果每個班有特點,這將使默認的反序列化不行,那麼有沒有辦法(沒有瘋狂的體操)爲每種類型制定反序列化方法。另外,不要將所有功能合併爲一個。獲取ArrayList<LayoutMap>應與反序列化每個類的功能分開。

+0

請查看更新後的問題...並且我沒有列出發病前的列表 – 2013-03-24 12:10:52

0

你可以只嘗試類似:

for (int i=0; i<type.size(); ++i) { 
    if (type.get(i) instanceof String) { 
     // Do something here 
    } 
} 

這將檢查列表中的每個元素,如果它的一個字符串,你可以在它的工作。

+0

當您的解決方案列表爲空時,無法識別類型 – Pragnani 2013-03-24 12:12:12

0

嘗試在您的類型上使用getClass()函數以在運行時查找對象的類。 例如.. type.getClass()。equals(java.lang。字符串)