在默认的构造函数问题try / catch块(problems in default constru

2019-10-17 13:35发布

我写了使用Scala程序。 在默认的构造函数我有这行。

private val url = new URL("http://www.  **  .xml")   //  throws  UnknownHostException
private val conn = url.openConnection
private val doc = XML.load(conn.getInputStream)

如你所知,如果你有网络通信问题可能会抛出异常。

我尝试了几种方法来写try / catch块这些行。 但每一次它让我看到其他的编译错误在其他地方类,在我使用这些变量的地方。

当然,我写了他们一个块中,我定义的变量为public。

有人可以给我写的如何正确地做到这一点的例子吗?

我可能不够具体,但我不知道解释什么,因为我不知道问题究竟出。

Answer 1:

使用模式匹配的try / catch块是Scala解决这个惯用方式。

import java.net.URL
import java.net._
import scala.xml.XML
try{
  val url = new URL("http://www. ** .xml")
  val conn = url.openConnection 
  val doc = XML.load(conn.getInputStream)
}catch{
  case uhe:UnknownHostException => println(uhe)
}


Answer 2:

这可能是一个改进:

import java.net.URL
import java.net._
import scala.xml.XML

val doc =
  try {
    val url = new URL("http://www.xxx.yyy/XYZZY.xml")
    val conn = url.openConnection
    Right(XML.load(conn.getInputStream))
  }
  catch {
    case ex: Exception => Left(ex)
  }

doc match {
  case Right(xmlDoc) => // Do stuff with the doc XML
  case Left(ex)      => // Do error stuff with the exception
}


文章来源: problems in default constructor with try/catch block
标签: scala