假设我有一个对象A,它可能有一个选项B,它也可能引用另一个可选对象C(嵌套选项)
我已经看到了几种访问C的方法,比如for-comprehension,pattern matching或flatMap,它们看起来都很好看.但是,如果我必须返回某种错误消息或者如果B或C丢失则抛出异常或提供无法执行的消息,因为B丢失或C未设置,该怎么办?我只能回归(嘲笑):
if(a.b.isDefined) { if(a.b.c.isDefined) { //do work } else throw new Exception1 //or call something other } else throw new OtherException //or do something other
我怎么能以功能或更流畅的方式处理?
解决方法
你可以使用getOrElse [B>:A](默认:⇒B):B:
a.b.getOrElse(throw new OtherException).c.getOrElse(throw new Exception1)
使用隐式包装器和AnyVal优化(前面描述过)是个好主意,但是你的代码变得不那么可读了.我认为更喜欢使用现有方法而不是每次都写包装器.
关于地图,这里真的没用.如果您不需要抛出异常,这是有道理的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。