2013-01-08 47 views
1

我用Scala编写了一个程序。 在默认构造函数中,我有这些行。带有try/catch块的默认构造函数的问题

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

正如你所知,如果你有互联网沟通问题可能会引发异常。

我尝试了几种方法在try/catch块中写入这些行。 但是每次在我使用这些变量的地方都会向我展示其他编译错误。

当然,我把它们写在一个块里面,我把变量定义为公共的。

有人可以给我写一个如何正确使用它的例子吗?

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

回答

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) 
} 
+0

我尝试 但我有问题,编译,我用DOC – user1957061

+0

然后,你必须让'doc'可用'try'的范围之外块。这样做的快速和肮脏的方法是像这样'var doc:Elem = null'初始化它,然后它在try块中被重新分配并且可以在其外部访问。注意在Scala中使用'Option'优于'null'。 – Brian

+0

现在我有其他问题 但是,谢谢这帮了我 – user1957061

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 
}