在Cyclops React“尝试使用资源”块中,我想将IOException
映射到自定义异常类型。我也用Javaslang尝试过这个,看起来不那么灵活,因为它对所有异常都一视同仁。
代码示例:
private static Try<String, ConnectionError> readString() {
// Socket is a thread-local static field
final Try<String, IOException> string = Try.catchExceptions(IOException.class)
.init(() -> new BufferedReader(new InputStreamReader(socket.get().getInputStream())))
.tryWithResources(BufferedReader::readLine);
return string.isSuccess() ? Try.success(string.get()) :
Try.failure(new ConnectionError("Could not read from server", string.failureGet()));
}
这可以用更优雅的方式完成吗?或者没有任何意义,最好返回try
免责声明:我是一个新手,通常使用Cyclops React库和函数编程,因此我可能有严重的概念误解。
您可以使用“访问”方法来转换失败类型。所有独眼巨人-反应类型都有一个访问方法或“变形”。这允许您与该数据类型的内部状态进行匹配。在尝试的情况下,它需要两个函数,如果尝试是成功的,则执行一个函数,如果尝试是失败的,则执行另一个函数。
private static Try<String, ConnectionError> readString() {
// Socket is a thread-local static field
return Try.catchExceptions(IOException.class)
.init(() -> new BufferedReader(new InputStreamReader(socket.get().getInputStream())))
.tryWithResources(BufferedReader::readLine)
.visit(Try::success,
e->Try.failure(new ConnectionError("Could not read from server", e));
}
Vavr/Javaslang-Try和cyclops-react-Try在概念/设计上有很大差异。其中一个可能更适合不同的用例。(Daniel可以概述Vavr Try背后的原理)。
cyclops-反应版本只处理显式命名的异常,并保留该类型信息。因此,cyclops-反应尝试采用两个通用参数,一个用于成功类型,一个用于最通用的推断异常类型。
cyclops react-Try通常不会捕捉正在进行的fluent操作(如map/flatMap等)中的异常,尽管它可以配置为这样做。
独眼巨人react Try的核心设计目标是避免隐藏bug。StackExchange答案有更详细的概述。
从Javaslang 2.1.0开始,可以执行以下操作:
Try<String> of = Try.withResources(() -> new BufferedReader(new InputStreamReader(socket.get().getInputStream())))
.of(BufferedReader::readLine)
.mapFailure(
Case(instanceOf(IOException.class), ConnectionError::new)
);
一、 e.我们添加了Try。使用Resources功能,现在可以映射故障。
mapFailure
方法采用可变数量的匹配案例。当异常不匹配(因此没有映射)时,原始异常仍然存在。
我认为将异常类型作为Try签名的一部分是没有意义的,例如Try
指定一组可能的异常类型也没有帮助,因为当编译器计算泛型的上界时,类型信息会丢失。
免责声明:我是Javaslang的创建者
我在Spring MVC中测试了一些请求映射,在我的应用程序中遇到了一个奇怪的情况。我决定创建一个简单的cenario,以便您能够理解我的问题。我将首先向您展示我的项目(源代码)的详细信息,然后再开始我的问题。 我的项目中有以下目录结构: 我的Tomcat部署描述符: DispatcherServlet的我的应用程序上下文: 第1页的我的控制器类。jsp: 我的page1.jsp: 我可以访问第1
我正在努力使用Java Spring Hibernate,我正在尝试实现Oauth2,在通过@ManyToMany将表用户连接到角色时,我不断遇到错误。我已经阅读了所有关于我的问题的答案,无论我尝试什么,我仍然得到了一个组织。冬眠映射异常。 以下是我正在努力做的事情的全部细节。 数据库结构 角色。JAVA 使用者JAVA 依赖性 问题: org.springframework.beans.fact
首先,我对这个问题太长表示最诚挚的歉意,但老实说,我不知道如何缩短它,因为每个部分都是一个特例。诚然,我可能对此视而不见,因为我已经把头撞到墙上好几天了,我开始绝望了。 我向所有通读这本书的人表示最大的尊重和感谢。 我希望能够通过使用Jersey ExceptionMapers将Shiro的AuthenticationException及其子类映射到JAX-RS响应,Jersey例外映射器是使用G
是否强制将我的外键实体从ClassA映射到ClassB中的主实体?
我有一个映射到字符串值的特定键的映射列表。 类似于<代码>列表 目标:浏览此地图列表,并收集所有地图中单个键的值。 我是怎么做到的- 问题是:如果没有这样的密钥,我会因为a.get(key)而出现异常!因为求平均值会得到一个空值。如何检查或使lambda忽略任何此类地图并继续前进。 我知道我可以在
我认为错误并不在注释中,因为我更改了几次注释,仍然得到了相同的异常。