io.Source
は怠け者なので、必要になるまで入力を評価しません。したがって、例外は初期化時にスローされるのではなく、初めて使用されるときにスローされます。この例は、次のことを示しています。
scala> class Foo(val x: io.Source)
defined class Foo
scala> new Foo(io.Source.fromInputStream(null))
res2: Foo = Foo@1c79f780
ここも例外ではありません。しかし、それを使用するとすぐに (この場合はコンソールに出力するために)、例外がスローされます。
scala> res2.x
java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:129)
ちょっとしたヒント: スロー可能オブジェクトをキャッチしないでください。これは、キャッチされたくないStackOverflowError
や などもキャッチするためです。OutOfMemoryError