为什么我在使用Collections.sort()时遇到编译时错误,但是没有使用TreeSet.add(new Object())

Oll*_*röm 4 java

为什么我被允许这样做:

TreeSet<Object> treeSet = new TreeSet<Object>();
treeSet.add(new Object());
Run Code Online (Sandbox Code Playgroud)

但不是这个:

final List<Object> objects = new ArrayList<Object>();
Collections.sort(objects);
Run Code Online (Sandbox Code Playgroud)

第一个给了我一个ClassCastException,但第二个给了我一个编译错误.据我所知,实际问题在两种情况下都是相同的:java.lang.Object没有实现Comparable接口.

更新:嗯由于某种原因这只适用于Java 7而不是6.我是愚蠢还是累?有人可以对此有所了解吗?

更新#2:我的确会得到不同的结果,具体取决于java版本.请看图片: 在此输入图像描述

aka*_*IOT 5

最初我在这里皱眉,但你是对的.

SortedSet接口不会强制您指定其泛型类型,Comparable因为TreeSet还允许您指定不是Comparator的类型Comparable.编译器无法区分这两个选项.