0

当我编译 java 代码时,它无法正确编译。但是当我运行程序时,
线程“main”java.lang.ClassCastException:java.lang.StringBuffer 中的异常无法转换为 java.lang.Comparable。

所以我有两个问题:

  1. 添加到SortedSetSortedMap的元素是否必须是可排序的?此规则是否也适用于 java 集合框架中的任何其他接口
  2. 为什么程序可以正确编译,但无法运行?程序运行时发生了什么

    导入 java.util.*;

    public class SortMe {
        public static void main(String args[]) {
            SortedSet<StringBuffer> s = new TreeSet<StringBuffer>();
            s.add(new StringBuffer("Red"));
            s.add(new StringBuffer("White"));
            s.add(new StringBuffer("Blue"));
            System.out.println(s.first());
        }
    

    }

4

1 回答 1

3

SortedSetComparable在其通用声明中采用类型,因为它们使用它来对插入的元素进行排序。现在由于StringBuffer不实施Comparable,所以你得到了那个例外。

SortedSet<T> --> `T` must implement `Comparable`

来自documentation: -

插入有序集合的所有元素都必须实现 Comparable 接口(或被指定的比较器接受)。此外,所有此类元素必须相互比较:e1.compareTo(e2)(或comparator.compare(e1, e2))不得为排序集中的任何元素e1 和e2 抛出ClassCastException。尝试违反此限制将导致有问题的方法或构造函数调用抛出 ClassCastException。

但问题是,你为什么要制作SortedSet<StringBuffer>而不是SortedSet<String>

于 2012-10-20T09:29:42.297 回答