2014-06-25 116 views
1

我有一個MongoDB集合,其中的文檔包含多個數組。我「米檢索這些文件和它們的數據存儲到的POJO無法將BasicDBList轉換爲數組(java)

在某些情況下,我可以這樣做:

BasicDBList kws = (BasicDBList)obj.get(Constants.KEYWORDS_STR); 
if(!kws.isEmpty()) 
    tb.setKeywords(kws.toArray(new String[0])); 

不過,我已經一個數組多數民衆贊成絆倒我,我還以爲它包含了多頭,但是。 toArray(new Long [0])拋出java.lang.ArrayStoreException。我想好了,由於某些原因,它們被存儲爲字符串,並嘗試轉換爲一個字符串數組,並且仍然得到java.lang.ArrayStoreException。

如何判斷BasicDBList認爲它存儲在哪個類中?

回答

0

由於BasicDBList extends ArrayList<Object>(注意 - 不使用泛型),所以不能保證kws將在其中包含同類型。您應該可以將new String[0]更改爲new Object[0]並避免該例外。

有沒有辦法可以輕鬆地詢問沒有某種聲明的數組:

if (instanceof){...} 
else if (instanceof) {...} 

你的數據模型應該映射出不夠好,這種模式不是必需的,或者至少不夠好,你知道有限的期望值。

+0

根據我的數據模型,它應該是Longs。看起來,JSON序列化程序在將Longs插入到MongoDB之前將它們轉換爲整數,因此它們被讀出爲整數。 – betseyb

+0

如果可以的話,驅動程序會嘗試將其值填入32位,如果必要的話將其提升到64位。同樣,它會反序列化,如果可以的話,試圖將它裝入53位。如果不能,它將返回一個Long的實例以避免失去精度。 – Keith

0

通過獲取BasicDBList的迭代器並查看對象,我發現它保存了Integers(這很奇怪,因爲它應該是Longs,但這是另一個問題的主題)。