我看到一个独特的情况,我的 keyset
和 key
的 LinkedHashSet
包含不同的数据类型,如下所示
如您所见,key
是 String
和 keyset
是 long
.
以下代码因此失败:
modifiedRowKeys.toArray(new Long[modifiedRowKeys.size()]);
我得到 ArrayStoreException
对于 String
值(value)观。
我能够从发送 Map<Long, Map<String,Object>>
的 Angular 应用程序中复制它到我的 Spring 服务器,其中包含图片中共享的数据。
编辑 1:
请查看 eclipse 中的以下奇怪行为:
这可能是我们用于对象转换的 Jackson Mapper 的问题吗?
编辑 2:
以下代码失败并返回 ClassCastException
说
String cannot be cast to Long
Set<Long> modifiedRowKeys = modifiedRowMap.keySet();
Long[] periodDateArray = new Long[modifiedRowKeys.size()];
int count = 0;
Iterator<Long> keyIterator = modifiedRowKeys.iterator();
while(keyIterator.hasNext()){
Long key = keyIterator.next();
System.out.println("key instanceof Long : " + (key instanceof Long));
periodDateArray[count++] = Long.valueOf(key);
}
这似乎是非常简单的逻辑!
编辑 3:
我已将问题重现如下:
public static void main(String[] args) {
CollectionsToArray collectionsToArray = new CollectionsToArray();
Map<String, Map<String, Object>> mapOfNumbers = collectionsToArray.prepareStrangeNumbersSetFromMapOfMap();
Object obj = mapOfNumbers;
collectionsToArray.convertMapToKeySetToArray(obj);
}
private Map<String, Map<String, Object>> prepareStrangeNumbersSetFromMapOfMap() {
Map<String, Map<String, Object>> longNumberMap = new LinkedHashMap<>();
Map<String, Object> stringValueMap = new HashMap<>();
stringValueMap.put("Adams", "Adithya");
stringValueMap.put("Edge", 80);
longNumberMap.put("1488376800000", stringValueMap);
return longNumberMap;
}
private void convertMapToKeySetToArray(Object obj) {
Map<Long, Map<String, Object>> mapOfNumbers = (Map<Long, Map<String, Object>>) obj;
Set<Long> stringNumbers = mapOfNumbers.keySet();
convertLongKeySetToArray(stringNumbers);
}
private void convertLongKeySetToArray(Set<Long> stringNumbers) {
Long[] stringNumbersArray = stringNumbers.toArray(new Long[0]);
Arrays.sort(stringNumbersArray);
System.out.println(stringNumbersArray);
}
最佳答案
如果我使用 Map<Long, String>
在您的“编辑 2”中运行代码它编译并运行良好。所以问题不在于你到目前为止所展示的内容。如上所述,尝试创建一个确实重现问题的 [mcve]。
我最好的猜测是你有这样的东西:
Map m = new HashMap (); //raw map received from jackson
m.put("abc", "def"); //it's in fact a Map<String, String>
Map<Long, String> modifiedRowMap = m; //but you cast it to something else
其余代码将编译,但您将在运行时遇到异常。
关于java - keyset 和 key 不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44407701/