当前位置: 首页 > 知识库问答 >
问题:

在一个不可变(纯函数)的上下文中不支持操作异常vs IllegalStateExcture

狄玮
2023-03-14

非法状态例外与不支持操作例外这一问题涵盖了一种情况与另一种情况的一般情况。我完全同意davidxxx接受的答案,因为我一直都是这样使用这两种答案的:

应使用UnsupportedOperationException,因为该方法根本不受支持,而应使用IllegalStateException,因为该方法受支持,但在当前状态下,它是不合法的。

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

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

共有1个答案

百里秋月
2023-03-14

在F中,最接近的例外是。Net异常,这两个异常分别是InvalidOperationException和NotSupportedException。

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

 类似资料:
  • 相反,将引发“UnsupportedOperationException”。看起来ContainerRequest没有从修改的请求中提取UserPrincipal。 修改是通过 问题是如何将主体信息从HttpServerProbe传输到ContainerRequestFilter。request具有安全信息(在本例中是SSL客户机证书信息),而com.sun.jersey.spi.containe

  • 我不知道;我不太明白在哪里可以抛出这个异常。 例如,我正在实现

  • 下面是在strList5的subList.clear()调用中引发异常的代码: 我清除子列表的方式有问题吗?或者这是8Java的臭虫?我的Java8在Mac上的版本是:java版本"1.8.0_45"Java(TM)SE运行时环境(构建1.8.0_45-b14)JavaHotSpot(TM)64位服务器VM(构建25.45-b02,混合模式)

  • 我正在使用Collections.sort()对一个列表进行排序,它似乎在我可以测试的每一个方面都工作正常。我的一些用户崩溃了。 但是,我所做的只是尝试对列表进行排序 我注意到这在Android 8及更高版本上不会发生。它只发生在5.0 - 7.1上 该列表被实例化为ArrayList,被填充,并被设置为作为泛型列表的类的实例的成员。然后用EventBus发布这个对象。然后使用Kotlin的< c

  • 我想从excel(.xlsx)文件中读取超过60万行。 我使用的是ApachePOI和xlsx拖缆。 Apache poi版本为3.15,因为xlsx streamer在上述版本中不支持 我只想迭代特定的列。我尝试过的是: 我得到这个例外,几乎没有警告 第35行是

  • 问题内容: 电子邮件验证 我想知道为什么我的数据不会写入磁盘。Python说我的操作不受支持。 问题答案: 您以只读方式打开变量“文件”,然后尝试对其进行写入: 相反,请使用“ w”标志。