Discuss / Java / 为什么treeSet用comparable报错?

为什么treeSet用comparable报错?

Topic source

不器

#1 Created at ... [Delete] [Delete and Lock User]

报错信息:class com.company.Message cannot be cast to class java.lang.Comparable (com.company.Message is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')

Set<Message> set = new TreeSet<Message>(received);//        set.addAll(received);
class Message implements Comparable<Message>
 @Override  public int compareTo(Message o) {        return this.sequence - o.sequence;    }

用Comparator正常运行

 Set<Message> set = new TreeSet<>(new Comparator<Message>() {//            @Override//            public int compare(Message o1, Message o2) {//                return o1.sequence - o2.sequence;//            }//        });

目前未搜索到原因。

不器

#2 Created at ... [Delete] [Delete and Lock User]

找到原因了,前面是用的java.util.Comparable,复写的是compare方法,会报错

当改成java.lang.Comparable,复写compareTo方法,顺利通过并且给出正确答案

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

JDK的java.util哪有Comparable?


  • 1

Reply