有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不可变(纯函数)上下文中的java UnsupportedOperationException与IllegalStateException

问题IllegalStateException vs UnsupportedOperationException涵盖了何时应使用一个与另一个的一般情况。我完全同意davidxxx接受的答案,因为我一直都是这样使用这两种答案的:

UnsupportedOperationException should be used as the method is not supported at all while IllegalStateException should be used as the method is supported but that in the current state, it is not legal.

然而,在函数式编程中,这种区别变得相当模糊:通常,在命令式OO语言中,“根本不受支持”是用多态子类来理解的。在函数式语言中,即使支持OO编程并将作为一个代码单元,它们在传统上相对于实例化过程的权重也会稍小一些。如果一个对象是不可变的,并且某个操作在任何时候都无法完成,那么它永远不会完成,这与在OO语言中接收更特定类的实例没有太大区别。同时,在IllegalStateException的文档中提到的“应用程序状态”的概念仍然存在,但我发现它在单个对象的上下文中有点误导,在函数式语言中有点不合适。这就是说,看到抛出UnsupportedOperationException的用户可能会遵循Java策略,并假设该方法在任何情况下都不会涉及给定类

我知道这在某种程度上是基于一般观点的,所以我想特别问一下,在ScalaF#的标准库之间是否存在使用共识,或者大型、广泛使用的操作系统项目是否开创了先例?我想确定一个单一的、定义明确的方案,遵循最小意外的政策


共 (1) 个答案

  1. # 1 楼答案

    在F#中,最接近的例外是。Net异常,对于您的两个-分别是InvalidOperationException和NotSupportedException

    选项/结果类型和模式匹配的使用强制执行编译时检查,以便良好的设计不会抛出这些异常。这是一种强类型的静态类型语言,比如F#不应该抛出这些异常(除了在与.Net库交互时处理它们)