Try
A Try is a wrapper for a computation that might fail.
sealed abstract class Try[+T]
case class Failure[+T](t: Throwable) extends Try[+T]
case class Success[+T](value: T) extends Try[+T]
Usage
Suppose that we have a method that throws an error.
def unsafeMethod(): String = throw new RuntimeException("No string")
We can use Try to catch it.
val potentialFail = Try(unsafeMethod())
println(potentialFail)
// Failure(java.lang.RuntimeException: No string)
There is a sytex sugar.
val potentialFail = Try {
unsafeMethod()
}
Utilities
-
isSuccess/isFailureprintln(potentialFail.isSuccess) // false -
orElseval fallbackTry = Try(unsafeMethod()) .orElse(Try(backupMethod()))Syntax sugar is:
val fallbackTry = Try { unsafeMethod() } orElse Try { backupMethod() } println(fallbackTry) // Success(A default string) -
map,flatMap,filter
API Design
If your codes might throw an error, wrap them with Try.
def betterUnsafeMethod(): Try[String] = Try {
throw new RuntimeException("No string")
}
def betterBackupMethod(): Try[String] = Try {
"A default string"
}
So, we can use it better.
val betterTry = betterUnsafeMethod() orElse betterBackupMethod()