我们刚刚收到了一份崩溃报告,但我实在不理解它,而且我也不确定这是否是一个好问题……但我无法想出其他的解释。
我有以下代码:
public class LeisureEventSelectedCategories {
private Set<Long> ids = new TreeSet<>();
public boolean contains(Long id) {
if (id == null) {
return false;
}
return ids.contains(id);
}
当代码行 return ids.contains(id)
抛出以下异常时:
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long
at java.lang.Long.compareTo(Long.java)
at java.util.TreeMap.find(TreeMap.java)
at java.util.TreeMap.findByObject(TreeMap.java)
at java.util.TreeMap.containsKey(TreeMap.java)
at java.util.TreeSet.contains(TreeSet.java)
at com.acme.b.a.d.a(LeisureEventSelectedCategories.java:50)
我在这里收到的
Long
是来自于一个Map<String, Long>
。leisureEventSelectedCategories.contains(eventCategoryNameToEventId.get(categoryName)) || leisurePlaceSelectedCategories.contains(placeCategoryNameToPlaceId.get(categoryName)),
在哪里
Map<String, Long> placeCategoryNameToPlaceId = new LinkedHashMap<>();
Map<String, Long> eventCategoryNameToEventId = new LinkedHashMap<>();
除了将
TreeSet
替换为HashSet
并在需要的地方使用Collections.sort()
之外,还有什么原因导致这种情况发生?在以后应该如何避免?
编辑:
选择来自服务器的所有项目后,leisureEventSelectedCategories
中的值图像:
![LeisureEventSelectedCategories values](https://istack.dev59.com/wgcQa.webp)
eventCategoryNameToPlaceId
中的值图像:
![eventCategoryNameToEventId values](https://istack.dev59.com/9Hq2A.webp)
contains
方法...虽然我知道这不应该是可能的,但我确实收到了一个带有此异常的崩溃报告 >.> 我将立即使用LinkedHashSet<Long>
替换TreeSet<Long>
以进行修复。 - EpicPandaForce