NavigableSet 无法添加不同的子 class

NavigableSet can't add different sub class

我有一个 NavigableSet 并想向其中添加两个元素,但是转换失败,如何解决? AModel 和 BModel 都实现了 BaseModel

 BaseModel AModel = new AModel();

 BaseModel BModel = new BModel();

 NavigableSet<BaseModel > ns = new TreeSet<BaseModel>(Arrays.asList(AModel, BModel));

异常:

  Exception in thread "main" java.lang.ClassCastException: com.simon.main.AModel cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at java.util.TreeSet.addAll(Unknown Source)
at java.util.TreeSet.<init>(Unknown Source)
at com.simon.main.Test3.main(Test3.java:18)

基础模型

 public interface BaseModel {

  }

模型

 public class AModel implements BaseModel{

  }

B模型

 public class BModel implements BaseModel{

  }

如果您没有将 Comparator 传递给 TreeSet 构造函数,那么您的元素 必须 实现 Comparable(并且必须与彼此的类型具有可比性)。 None 个类型是 Comparable

阅读您正在使用的构造函数的 docs

All elements inserted into the set must implement the Comparable interface. Furthermore, all such elements must be mutually comparable: e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the set.