与强制执行可比较类型的集合相比,在编译时检查时抛出运行时异常有什么好处?

ChiefTwo铅笔

在实现自己的数据结构(需要可比较的类型)时,我总是这样做:

public class ComparableCollection<E extends Comparable<E>> { ... }

显然,这会在编译时强制执行可比较的约束。但是我这几年来一直是学生,却以某种方式忽略了这样一个事实,即强制使用可比类型的集合的Java实现在编译时并没有这样做,而是在运行时抛出了一个ClassCastException添加元素的错误。例如:

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, ... { ... }

TreeSet由aNavigableMap作为后盾,如果Comparatornull,则尝试按以下方式投射键:

Comparable<? super K> k = (Comparable<? super K>) key;

现在,如果插入的类型不具有可比性,ClassCastException则抛出a。

与在编译时强制执行约束相比,此设计的真正好处是什么?

ControlAltDel

好处是您可以将TreeSet与未实现Comparable但可以为其提供对象的对象一起使用Comparator

有关Comparable a Comparator之间的区别的更多信息,请参见:Java:Comparable与Comparator

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么会出现这种使用泛型不会抛出运行时或编译时的异常?

来自分类Dev

有什么需要抛出运行时异常

来自分类Dev

为什么dart不会抛出编译时错误类型异常。运行时间?

来自分类Dev

构建通用应用的发行版时,为什么我的Xamarin PCL会抛出运行时异常?

来自分类Dev

什么时候抛出运行时异常?

来自分类Dev

您如何在编译时访问有关值的运行时类型的信息?

来自分类Dev

在编译时强制执行静态存储

来自分类Dev

如何在编译时强制执行非泛型类型

来自分类Dev

在非整数类型的初始化期间强制执行编译时检查

来自分类Dev

如何使@NotNull抛出运行时异常?

来自分类Dev

如何使@NotNull抛出运行时异常?

来自分类Dev

将来<T>获得()卡住时可运行的抛出异常 - 在单独执行服务运行时?

来自分类Dev

当(大多数)其他检查在编译时发生时,为什么Rust在运行时检查数组范围?

来自分类Dev

为什么此代码编译并在执行时给出运行时错误

来自分类Dev

为什么在编写编译器时需要运行时库?

来自分类Dev

如何确定是否对异常进行了编译时检查或运行时检查?

来自分类Dev

我可以在编译时强制执行永远不会调用该函数吗?

来自分类Dev

C#中的运行时类型与编译时类型

来自分类Dev

C#中的运行时类型与编译时类型

来自分类Dev

将未经检查的已检查异常抛出。有什么办法可以防止在运行时?

来自分类Dev

Java的8个流,如何减少或收“破发”,没有抛出运行时异常?

来自分类Dev

为什么从未执行过的Swift 3代码会抛出运行时错误?

来自分类Dev

为什么从未执行过的Swift 3代码会抛出运行时错误?

来自分类Dev

运行时异常:执行doInBackground()时发生错误

来自分类Dev

运行时异常:执行doInBackground()时发生错误

来自分类Dev

在编译时强制HList类型的上限

来自分类Dev

将作为通用类型参数的运行时Dictionary <K,V>强制转换为其正确的编译时类型

来自分类Dev

为什么将Throwable抛出异常时没有给出未经检查的强制转换警告?

来自分类Dev

为什么BufferedReader类在编译时而不是在运行时产生异常

Related 相关文章

  1. 1

    为什么会出现这种使用泛型不会抛出运行时或编译时的异常?

  2. 2

    有什么需要抛出运行时异常

  3. 3

    为什么dart不会抛出编译时错误类型异常。运行时间?

  4. 4

    构建通用应用的发行版时,为什么我的Xamarin PCL会抛出运行时异常?

  5. 5

    什么时候抛出运行时异常?

  6. 6

    您如何在编译时访问有关值的运行时类型的信息?

  7. 7

    在编译时强制执行静态存储

  8. 8

    如何在编译时强制执行非泛型类型

  9. 9

    在非整数类型的初始化期间强制执行编译时检查

  10. 10

    如何使@NotNull抛出运行时异常?

  11. 11

    如何使@NotNull抛出运行时异常?

  12. 12

    将来<T>获得()卡住时可运行的抛出异常 - 在单独执行服务运行时?

  13. 13

    当(大多数)其他检查在编译时发生时,为什么Rust在运行时检查数组范围?

  14. 14

    为什么此代码编译并在执行时给出运行时错误

  15. 15

    为什么在编写编译器时需要运行时库?

  16. 16

    如何确定是否对异常进行了编译时检查或运行时检查?

  17. 17

    我可以在编译时强制执行永远不会调用该函数吗?

  18. 18

    C#中的运行时类型与编译时类型

  19. 19

    C#中的运行时类型与编译时类型

  20. 20

    将未经检查的已检查异常抛出。有什么办法可以防止在运行时?

  21. 21

    Java的8个流,如何减少或收“破发”,没有抛出运行时异常?

  22. 22

    为什么从未执行过的Swift 3代码会抛出运行时错误?

  23. 23

    为什么从未执行过的Swift 3代码会抛出运行时错误?

  24. 24

    运行时异常:执行doInBackground()时发生错误

  25. 25

    运行时异常:执行doInBackground()时发生错误

  26. 26

    在编译时强制HList类型的上限

  27. 27

    将作为通用类型参数的运行时Dictionary <K,V>强制转换为其正确的编译时类型

  28. 28

    为什么将Throwable抛出异常时没有给出未经检查的强制转换警告?

  29. 29

    为什么BufferedReader类在编译时而不是在运行时产生异常

热门标签

归档