HTC M8(6.0.1):TreeSet <long> .contains(Long)抛出类强制转换异常:&#34;不能强制转换为Double to Long&#34;

时间:2017-07-14 11:45:35

标签: java android classcastexception

我们刚收到一份我真实不理解的崩溃报告,我甚至不确定这是一个好问题......但我可以&#39想想什么。

我有以下代码:

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

eventCategoryNameToPlaceId

中的值图像

eventCategoryNameToEventId values

1 个答案:

答案 0 :(得分:0)

最后,我们只用LinkedHashSet<Long>替换它,崩溃就消失了。