gpt4 book ai didi

当我运行关于Java集合接口(interface)的java代码时发生java.lang.ClassCastException

转载 作者:行者123 更新时间:2023-12-02 00:10:13 25 4
gpt4 key购买 nike

当我编译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());
    }

    }

最佳答案

SortedSet只取Comparable类型在它们的通用声明中,因为它们使用它来对插入的元素进行排序。现在从 StringBuffer不实现Comparable ,所以你会得到这个异常。

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

来自 documentation : -

All elements inserted into a sorted set must implement the Comparable interface (or be accepted by the specified comparator). Furthermore, all such elements must be mutually comparable: e1.compareTo(e2) (or comparator.compare(e1, e2)) must not throw a ClassCastException for any elements e1 and e2 in the sorted set. Attempts to violate this restriction will cause the offending method or constructor invocation to throw a ClassCastException.

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

关于当我运行关于Java集合接口(interface)的java代码时发生java.lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12987085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com