【问题标题】:java.lang.ClassCastException: java.lang.Short cannot be cast to java.lang.Integer when sortingjava.lang.ClassCastException: java.lang.Short 在排序时不能转换为 java.lang.Integer
【发布时间】:2018-04-13 20:59:11
【问题描述】:

如果值为Short类型HashMap<Long, Short>(),如何按值排序hashmap?

当我使用像

这样的通用排序时
public static <K extends Comparable<K>, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
    Comparator<K> valueComparator =  new Comparator<K>() {
        public int compare(K k1, K k2) {
            int compare = map.get(k1).compareTo(map.get(k2));
            return compare != 0 ? compare : k1.compareTo(k2);
        }
    };
    Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
    sortedByValues.putAll(map);
    return sortedByValues;
}

我收到此错误:

java.lang.ClassCastException: java.lang.Short 不能转换为 java.lang.Integer

【问题讨论】:

  • 问题可能出在您的输入数据上。你能提供一个调用这个方法的小例子吗? @Jabob G:我不同意这是重复的,问题是 ClassCastException 而不是按值排序

标签: java sorting java-7 classcastexception


【解决方案1】:

此代码中的任何地方都没有明确的类型转换。

因此,我得出结论,ClassCastException 是由编译器在将某个泛型方法返回的值分配给具有特定类型的变量时插入的隐式类型转换引起的。

此外,由于隐式类型转换仅在您/某人选择忽略或抑制有关不安全转换等的 Java 编译器警告的情况下才会失败,因此我得出结论

  • 这一定是发生了,而且
  • 这是您的问题的原因。

简而言之,问题的原因不在于您包含在问题中的代码。它在别的地方......


以后一定要包括:

  • 足够的上下文让人们查看您的代码是如何被使用的。理想情况下是 MCVE。
  • 异常的完整堆栈跟踪。

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2014-08-29
    • 2018-01-01
    • 2012-05-01
    • 2017-10-01
    相关资源
    最近更新 更多