当实现需要相当的类型我一直在做这样这样我自己的数据结构:在执行类似类型的集合的编译时检查上抛出运行时异常有什么好处?
public class ComparableCollection<E extends Comparable<E>> { ... }
这显然强制在编译时可比约束。但是我在过去几年中一直是一名学生,并且忽略了这样一个事实,即强制执行类似类型的集合的Java实现在编译时不会这样做,而是在运行时通过添加元素时可能抛出ClassCastException
;例如:
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, ... { ... }
TreeSet
由NavigableMap
,如果它的Comparator
是null
,试图投的关键,像这样的支持:
Comparable<? super K> k = (Comparable<? super K>) key;
现在,如果插入ISN类型不可比拟的ClassCastException
被抛出。
这个设计在编译时强制约束的真正好处是什么?
另请参阅http://stackoverflow.com/questions/13890542/creating-a-treeset-with-a-non-comparable-class-why-a-run-time-exception-rather。 'TreeSet'中的元素不需要比较,你可以明确地给出一个比较器。 – Tunaki
@Tunaki,令人惊讶的是,当你走出自己的头时,事物会变得更有意义。这太有道理了。现在有一个时刻。 – ChiefTwoPencils