What is a
or b
if an exception occurs? Wrap a
and b
in Try
to handle exceptional cases. You can also map a pattern for them to extract values.
scala> class MyClass(val a: Try[String], val b: Try[String]) defined class MyClass scala> new MyClass(Try("foo"(0).toString), Try("foo"(3).toString)) res0: MyClass = MyClass@6bcc9c57 scala> res0.a res1: scala.util.Try[String] = Success(f) scala> res0.b res2: scala.util.Try[String] = Failure(java.lang.StringIndexOutOfBoundsException: String index out of range: 3) scala> res0.a.get res3: String = f scala> res0.b.get java.lang.StringIndexOutOfBoundsException: String index out of range: 3 at java.lang.String.charAt(String.java:658) ...
Editing comments. Uses argumens for a
and b
by default .
null
bad, but that is what you asked for. See Option
class MyClass(val a: Try[String] = null, val b: Try[String] = null) scala> new MyClass(Success("a")) res50: MyClass = MyClass@625aaaca scala> res50.a res51: scala.util.Try[String] = Success(a) scala> res50.b res52: scala.util.Try[String] = null scala> new MyClass(b = Success("b")) res53: MyClass = MyClass@68157e85 scala> res53.a res54: scala.util.Try[String] = null scala> res53.b res55: scala.util.Try[String] = Success(b)
Brian source share