无法将BasicDBList转换为数组(java)

时间:2014-06-25 20:25:15

标签: java arrays mongodb

我有一个MongoDB集合,其中的文档包含多个数组。我正在检索这些文档并将其数据存储到POJO中。

在某些情况下,我可以这样做:

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

然而,我有一个阵列让我感到难过。我认为它包含Longs,但toArray(new Long [0])抛出java.lang.ArrayStoreException。我认为好,由于某种原因,它们存储为字符串,并尝试转换为字符串数组,仍然有一个java.lang.ArrayStoreException。

如何判断BasicDBList认为它存储在哪个类中?

2 个答案:

答案 0 :(得分:0)

通过获取BasicDBList的迭代器并查看对象,我发现它保存了整数(这很奇怪,因为它应该是Longs,但这是另一个问题的主题)。

答案 1 :(得分:0)

由于BasicDBList extends ArrayList<Object>,(注意 - 未使用泛型),因此无法保证kws中包含同类型。您应该可以将new String[0]更改为new Object[0]并避免例外。

如果没有某种陈述,就没有办法轻易询问数组:

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

您的数据模型应该被很好地绘制出来,以至于不需要这种模式,或者至少足以让您知道预期的有限集合。