我想处理不同的失败案例(返回为尝试)。
示例代码
main(args(0)) match {
case Success(result) => result.foreach(println)
case Failure(ex) => ex match {
case FileNotFoundException =>
System.err.println(ex.getMessage)
case StatsException =>
System.err.println(ex.getMessage)
case _ => {
ex.printStackTrace()
}
System.exit(1)
}
}
如果是StatsException
或FileNotFoundException
只需打印消息,对于所有其他异常,打印堆栈跟踪。
然而,ex永远只是一个可丢弃的,因此case StatsException
是一个没有结果的类型测试(根据IntelliJ,类型Throwable的值不能也是StatsException.type)
更糟糕的是,我会遇到编译错误:java。伊奥。FileNotFoundException不是一个值
以惯用的方式处理不同的失败案例的最佳方式是什么?
这似乎有效:
main(args(0)) match {
case Success(result) => result.foreach(println)
case Failure(ex: FileNotFoundException) =>
System.err.println(ex.getMessage)
System.exit(1)
case Failure(ex: StatsException) =>
System.err.println(ex.getMessage)
System.exit(1)
case Failure(ex) =>
ex.printStackTrace()
System.exit(1)
}
如果有这个系统就好了。退出(1)所有故障案例共享的呼叫。
我会简化你自己的回答:
main(args(0)) map (_ foreach println) recover {
case ex@(_: FileNotFoundException | _: StatsException) =>
System.err.println(ex.getMessage)
System.exit(1)
case ex =>
ex.printStackTrace()
System.exit(1)
}
在第一个案例中
子句中,我们匹配两个选项。scala禁止像case ex:FileNotFoundException | ex:statexception
这样的声明,但我们可以通过@
符号分配整个匹配结果。有关更多详细信息,请参见此问题
我正在与我无法控制的遗留库集成。 它定义了以下接口: 这个“subscribe”方法被不同的线程频繁调用。我关心“Future.get()”的结果的唯一情况是当它失败时,所以我可以获取并处理异常。这不一定发生在调用线程中。另外,在“Future.get()”上阻塞调用线程对我来说是非常昂贵的,因为即使成功也可能需要几秒钟才能完成。 所以我的任务是以某种方式“后处理”所有这些期货,过滤失败的期货。基
在更新到Android Studio3.2 Beta 1后,我开始在两个不同的项目中出现以下错误: Android Studio 3.1.3没有错误,在更新到beta 1之前,Android Studio 3.2的各种金丝雀版本也没有错误。 这不是Android Studio Gradle已经释放的模块的副本 编辑 事件日志显示
我正在开发一个仅支持iPhone的iOS 8应用程序。我想只支持iPhone 4S的纵向模式设备。 我有一个图形设计,它采用全屏内容。我使用自动布局来处理视图,并使其适用于所有屏幕。但是,我使用一个小资产来管理从iPhone4S工作的设计。当我在iPhone6S/6看到它时,内容非常小,大量额外的空间被浪费了。 当设备分辨率变大时,我想增加字体大小、图像大小。这个应用程序中有很多屏幕。 例如,我在
我在spark streaming应用程序中看到一些失败的批处理,原因是与内存相关的问题,如 无法计算拆分,找不到块输入-0-1464774108087
类项目: hbm文件: 方法如下:
我在服务器1、服务器2和服务器3上运行zookeeper设置,同样kafka也在服务器1、服务器2和服务器3上运行。 安装程序正在kubernetes中运行。 问题陈述: > 如果一个动物园管理员设置关闭,整个设置都会关闭,因为kafka依赖于动物园管理员。我说得对吗? 如果Q1正确-是否有任何方法来进行设置,例如如果一个动物园管理员服务器将停机,那么kafka应该按原样运行? 如何在kubern