我应如何检查Future不为空

Man*_*dha 4 scala

以下代码返回Future

val findUserFuture: Future[Option[User]] = userRepo.findOne(userKeys) 
Run Code Online (Sandbox Code Playgroud)

然后我处理 Future

findUserFuture.flatMap {....}
.recover{...}
Run Code Online (Sandbox Code Playgroud)

我想recover如果flatMap抛出一个将被调用Exception。但是,如果findOne回报null呢?有没有一种Scala特定的方式来检查findUserFuture是不是null?我可以吗,if(findUserFuture != null)但我想知道是否Scala提供了一些不同的方法来检查nulls

Tim*_*Tim 9

Future和和Future本身的结果之间null以及和之间存在差异None

null是Java中的遗留物,通常在Scala中不使用。Future本身可能的唯一方法nullfindOne返回null,这是极不可能的。因此,测试Future本身不会有用。

未来的结果是Option[User],内的代码flatMap将被赋予Some(user)或的值None。您可以使用标准Option方法来测试该值。通常,您将match根据值或调用map来处理内容(如果存在)。有许多stackoverflow答案说明了如何Option安全地取消取值。

请注意,该Option[User]值可以是,null但是再次出现的可能性很小,并且是库中的错误。