使用try / catch块的默认构造函数中的问题

时间:2013-01-08 06:58:55

标签: scala

我用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块中编写这些行。 但是每当它在类中的其他地方向我显示其他编译错误时,在我使用这些变量的地方。

当然我在一个区块内写了它们,我把变量定义为公共。

有人可以给我一个如何正确操作的例子吗?

我可能不够具体,但我不知道究竟要解释什么,因为我不知道问题到底在哪里。

2 个答案:

答案 0 :(得分:1)

在try / catch块中使用pattern matching是在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)
}

答案 1 :(得分:0)

这可能是一种改进:

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
}