gpt4 book ai didi

java - 尝试在没有比较器的情况下添加树集中时,StringBuffer 未给出 ClassCastException

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

当尝试运行以下代码时,我预计会出现 ClassCastException:

 //  TreeSet<StringBuffer> t = new TreeSet<StringBuffer>((a, b) -> - 
// a.toString().compareTo(b.toString()));
TreeSet<StringBuffer> t = new TreeSet<StringBuffer>();
Function<String, StringBuffer> f = s -> new StringBuffer(s);
t.add(f.apply("A"));
t.add(f.apply("M"));
t.add(f.apply("B"));
t.add(f.apply("Z"));
t.add(f.apply("G"));
System.out.println(t);

我已经评论了比较器代码,并尝试在没有比较器的情况下使用。但我仍然得到正确的输出。这怎么可能,因为 StringBuffer 没有实现 Comparable 接口(interface)。我使用的是Java 11。后续版本中是否有与此相关的任何更改。

最佳答案

您正在比较器中将 StringBuffer 转换为 String,并且 String类实现了 Comparable 接口(interface),也作为从 jdk-11 StringBuffer 开始的注释和 StringBuilder还实现了Comparable

(a, b) -> -a.toString().compareTo(b.toString())

但是如果您使用的是jdk-11以下的较低版本,您将收到编译时错误

The method compareTo(StringBuffer) is undefined for the type StringBuffer

关于java - 尝试在没有比较器的情况下添加树集中时,StringBuffer 未给出 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60422510/

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